2010-07-05 131 views
1

我是vb.net(框架4)的新手,Visual Studio在以下声明中给我提出了警告。vb.net声明的问题

Private Declare Auto Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long 

Private Declare Auto Function FindWindow Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 

Private Declare Auto Function GetWindowText Lib "user32" (ByVal hwnd As IntPtr, ByVal lpString As String, ByVal cch As IntPtr) As IntPtr 

Private Declare Auto Function keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer) As Boolean 

Private Declare Auto Function SendMessage Lib "user32" (ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 

Private Declare Auto Function SetForegroundWindow Lib "user32" (ByVal hWnd As IntPtr) As Boolean 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Integer) 

更重要的是我如何在未来找出正确的声明?

+1

http://pinvoke.net/是一个很好的资源,但它通常只有C# – Rup 2010-07-05 18:13:12

+0

当你提到一些错误或警告,请将它们添加到你的问题 – Andrey 2010-07-05 18:15:17

回答

2

我无法想象你会从这些声明中得到警告。但是,是的,EnumChildWindows是错误的,并且不可能在VB.NET程序中使用。修复:

Private Delegate Function EnumChildCallback(ByVal hWnd As IntPtr, ByVal lparam As IntPtr) As Boolean 

Private Declare Auto Function EnumChildWindows Lib "user32" (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumChildCallback, ByVal lParam As IntPtr) As Boolean 

GetWindowText的cch参数是错误的,它是Integer。其余的都很好。

Pinvoke.net是这些声明一个合理的体面资源。或者您可以使用P/Invoke Interop Assistant工具。它们都不是完美的,只有SO才是。

3

它看起来像你正在转换一个VB6应用程序。所有这些函数都有.net等价物,使用它们。

+0

我不是故意粗鲁,但我在哪里可以找到这种等同物? – Jigs 2010-07-05 18:22:05

+0

为睡眠功能使用 System.Threading.Thread.Sleep(no_of_milliseconds) 如果您创建一个窗体大多数其他功能是窗体的属性 – David 2010-07-05 19:05:45