2015-10-19 47 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