2015-10-19 57 views
0

我有一个代码在VB编码在Microsoft Visual Studio 2015不幸的是我运行程序时出现错误。Pinvoke堆栈不平衡发生,检查Internet连接

这里的错误:

Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem in 'C:\Users\PC_6\Documents\Visual Studio 2015\Projects\Test\test\bin\Debug\Test.vshost.exe'. 

Additional information: A call to PInvoke function 'Test!Test.Form1::InternetGetConnectedState' has unbalanced the stack. 

这里是我的代码。

Imports System.Runtime.InteropServices 

Public Class Form1 

Private Declare Function InternetGetConnectedState Lib "wininet" (ByRef conn As Long, ByVal val As Long) As Boolean 

Private Sub btnPay_Click(sender As Object, e As EventArgs) Handles btnPay.Click 

    Select Case ListBox1.SelectedIndex 
     Case 0 
      MsgBox("Selected Payment is " + ListBox1.SelectedItem) 
     Case 1 
      MsgBox("Selected Payment is " + ListBox1.SelectedItem) 
     Case 2 

      btnPay.Text = ("Checking Connection") 
      Dim Out As Integer 
      If InternetGetConnectedState(Out, 0) = True Then 
       MsgBox("Connected!") 
      Else 
       MsgBox("No Connection!") 
      End If 
     Case Else 
      MsgBox("Please Select a Payment Type") 
    End Select 
End Sub 

末级

+0

http://pinvoke.net/default.aspx/wininet/InternetGetConnectedState.html –

+0

'...因为长'是错的 – Plutonix

回答

0

InternetGetConnectedStatehttps://msdn.microsoft.com/en-us/library/windows/desktop/aa384702%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396)文档显示它接受LPDWORDDWORD参数,在.NET等同分别out UInt32(或ref)和UInt32

您的签名改成这样:

Public Enum InternetConnection As UInt32 
    None = 0, 
    Configured = &H40, 
    Lan = &H02, 
    Modem = &H01, 
    ModemBusy = &H08, 
    Offline = &H20, 
    Proxy = &H04, 
    RasInstalled = &H10 
End Enum 

Private Declare Function InternetGetConnectedState Lib "wininet" (ByRef flags As InternetConnection, ByVal reserved As UInt32) As Boolean 

并称为像这样:

Dim result As Boolean 
InternetConnection flags; 
result = InternetGetConnectedState(flags, 0); 
If result = False Then 
    ' TODO: Call GetLastError to eliminate other causes of failure before determining it is indeed due to a lack of an internet connection 
End If