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

  • Автор темы Conteacky
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

Conteacky

#1
Перенес код из VB6, где он без проблем работает в VB 2005 (NET 2.0) и сразу проблемы. Помогите разобраться - ошибка или NET и API несовместимы ?
Код:
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
 
H

Hetman

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

Conteacky

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

Conteacky

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

Conteacky

#5
Я думаю тему можно закрывать - не дружат. Не могут поделить Memory.
 
Статус
Закрыто для дальнейших ответов.