Ошибка или Vb.net не дружит с Win32 Api ?

Тема в разделе ".NET", создана пользователем Conteacky, 9 дек 2006.

Статус темы:
Закрыта.
  1. Conteacky

    Conteacky Гость

    Перенес код из VB6, где он без проблем работает в VB 2005 (NET 2.0) и сразу проблемы. Помогите разобраться - ошибка или NET и API несовместимы ?
    Код (Text):
    Imports System
    Public Class Form1
    Private Declare Function FindWindow Lib "user32" _
    Alias "FindWindowA" _
    (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As IntPtr
    Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" _
    (ByVal hwnd As IntPtr) As Integer
    Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" _
    (ByVal hwnd As IntPtr, _
    ByVal lpString As String, _
    ByVal cch As Long) As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim hwnd As IntPtr = FindWindow(vbNullString, "Form1")
    Dim Length As Integer = GetWindowTextLength(hwnd)
    Dim sName As String = Space$(Length)
    GetWindowText(hwnd, sName, Length)
    TextBox1.Text = sName
    End Sub
    End Class
     
  2. Hetman

    Hetman Гость

    Код - это хорошо, но за ошибка? Что пишет или просто не фурычит? Надо детальней описывать задачу
    Если я не ошибаюсь в vb.net несколько изменилась концепция относительно типа переменных и думаю в этом загвоздка. Ниже есть пример вызова той функции, которая тебе нежна как говорится "найди 10 отличий". К тому же ответ на твой вопрос легко найти через поискоик например введя это "FindWindow vb.net Alias private" я смог найти кусок кода:
    Код (Text):
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowsName As String) As Long
     
  3. Conteacky

    Conteacky Гость

    FindWindow и GetWindowTextLength работают нормально, загвоздка начинается при выполнении GetWindowText: Debug -;This is likely because the managed PInvoke. А по поводу кода - так я пробовал вместо обычного декларирования использовать <DllImport("User32.dll", EntryPoint:="GetWindowText")> - то-же самое.
     
  4. Conteacky

    Conteacky Гость

    Да, если возвращать значение FindWindow как Long - полный бред получается. Да попробуй заменить в ней IntPtr на Long и задать TextBox1.Text = hwnd - увидишь сам какой-то 5556673238548566868670544025.
     
  5. Conteacky

    Conteacky Гость

    Я думаю тему можно закрывать - не дружат. Не могут поделить Memory.
     
  6. Dottik

    Dottik Гость

    http://www.pinvoke.net
    здесь вы найдете много ответов по вопросам на тему .NET <-> WinApi
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей