VB GetAsyncKeyState'使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。



我正在研究一个小程序,但是在Visual Studio中运行我的程序时,我会收到以下错误:

getAsynckeystate'堆栈不平衡。这可能是因为托管PinVoke签名与非托管目标签名不符。

但是,当我将其构建到.exe时,它运行正好。但这使得很难调试程序。

这是引发错误的代码狙击手:

            If InGame And Not GetAsyncKeyState(Keys.Tab) Then
            If Settings.SkinChangera Then SkinChanger.Skinchanger()
        End If

这是getAsynckeystate()

Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

我建议您永远不会寻找或使用您从Internet获得的Declare Lib语句。其中大多数都适用于 vb6 ,因此几乎总是与vb.net完全兼容。

而是坚持使用 DllImport属性的解决方案。网站 pinvoke.net 是寻找P/Invoke声明的好地方。如果找不到P/Invoke声明的VB.NET版本,请拿C#版本并通过转换器运行,例如 telerik

话虽如此,您正在收到错误,因为参数和返回值不是正确的数据类型。 GetAsyncKeyState()函数的参数应为 Integer,其返回值应为 Short

使用正确的数据类型,请使用 DllImport函数的版本,它应该有效:

<DllImport("user32.dll")> _
Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
End Function

注意: System.Windows.Forms.Keys枚举是类型Integer

最新更新