Public Class Form1
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ProgressBar1.Value = 0
        Dim i As Long
        For i = 1 To 100
            ProgressBar1.Value = i
            Sleep(20)        Next
    End Sub
End Class
编译没有错误,运行时就会
对 PInvoke 函数“WindowsApplication1!WindowsApplication1.Form1::Sleep”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
请教大家,这是什么问题?

解决方案 »

  1.   

    API函数的数据类型声明错误,对于VB.NET来说,Long表示8字节,Integer表示4字节,而VB6中Logn表示4字节,Integer表示2字节,而kernel32表示32位的API类库,因此参数dwMilliseconds为4字节,即VB6中的Long,VB.NET中的Integer。
      

  2.   

    我一般直接用Threading.Thread.Sleep (20),暂停0.02秒。
      

  3.   

    对不起,我对CSDN不是很熟悉,不知道要结贴、
    现在结了,谢谢