读书人

PInvoke 函数GetSystemMenu的调用招致

发布时间: 2013-10-25 14:36:53 作者: rapoo

PInvoke 函数GetSystemMenu的调用导致堆栈不对称

  'InternetGetConnectedState函数判断本机网络是否通畅
Public Declare Function InternetGetConnectedState _
Lib "wininet.dll" (ByVal lpszUrl As String, ByVal dwFlags As Integer, _
ByVal dwReserved As Integer) As Long
Public Const FLAG_ICC_FORCE_CONNECTION = &H1
'-------------------------------------------------------------------
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim n As Integer
Dim i As Integer
Dim a As String
n = TextBox3.Text
a = TextBox4.Text
For i = 1 To n
If InternetGetConnectedState("a", FLAG_ICC_FORCE_CONNECTION, 0) = 1 Then '0,Flash. 1,ture
Call duankai()
Else
Call lianjie()
End If
n = n - 1
Next
End Sub
出现这个其他信息: 对 PInvoke 函数“WindowsApplication3!WindowsApplication3.Form1::InternetGetConnectedState”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
但是调试照样成功。 求解决 还有我是用VS来写VB的,请说明为什么会出现这个问题。谢啦
[解决办法]
Private Declare Function InternetGetConnectedState Lib "wininet.dll" _
(ByRef lpdwFlags As Int32, ByVal dwReserved As Int32) As Boolean

Private Enum ConnectionStates
Modem = &H1
LAN = &H2
Proxy = &H4
RasInstalled = &H10
Offline = &H20
Configured = &H40
End Enum

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
[解决办法]
很明显,你抄的代码是用于VB6的,VB6的Long相当于VB.NET的Integer。因为VB6虽然是32位的,但是保持了和VB1.0的兼容性,在早期286的电脑上,字长是16位的,所以32位对于那种古董电脑来说是“Long”的。

读书人网 >VB Dotnet

热点推荐