本人新手,最近学习API函数调用,用的是vs2010,但是运行时就会出错,说API函数调用导致堆栈不对称,希望大家帮忙解决一下   Public Class Form1
    Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    Const VK_LEFT As Long = &H27    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = "Begin"
        Timer1.Interval = 10
        Timer1.Enabled = True
    End Sub    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Label1.Text = "Hello"
        If GetAsyncKeyState(VK_LEFT) Then
            Label1.Text = "OK!"
        Else
            Label1.Text = "NO!"
        End If
    End Sub
End Class

解决方案 »

  1.   

    将上面的函数声明的Long改为Integer,Integer改为Short原因是VB.NET和VB6中整形长度不同,VB.NET中
    Long     Int64
    Integer  Int32 (相当于VB6中的Long)
    Short    Int16 (相当于VB6中的Integer)
      

  2.   

    可能很多人都会忽略这个问题。
    恭喜楼主…………
    VS 中,在窗体模块声明API 能用 Public 啊?
      

  3.   

    可以的,这个这是不过是测试,真的做起来最好还是用Privte
      

  4.   

    用 API 本身就不是很简单。
    比如 CopyMemory 的 Void* 参数,win.tlb 中就轻易给 VB 调用声明出 9 个变种函数。
      

  5.   

    vb6与vb.net调用API的不同之处,网上还是可以查到的。