C# - 在记录良好的函数中检测到PInvokeStackImbalance?

Aar*_*ond 9 c# pinvoke

这是我的ClickMouse()函数的代码:

    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);


    private const long MOUSEEVENTF_LEFTDOWN = 0x02;
    private const long MOUSEEVENTF_LEFTUP = 0x04;
    private const long MOUSEEVENTF_RIGHTDOWN = 0x08;
    private const long MOUSEEVENTF_RIGHTUP = 0x10;
    private void ClickMouse()
    {
        long X = Cursor.Position.X;
        long Y = Cursor.Position.Y;
        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

    }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我的程序来到此代码时,它会抛出此错误消息:

检测到PInvokeStackImbalance消息:调用PInvoke函数'WindowsFormsApplication1!WindowsFormsApplication1.Form1 :: mouse_event'使堆栈失去平衡.这很可能是因为托管PInvoke签名与非托管目标签名不匹配.检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配.

请帮忙?

Sco*_*ein 13

看起来你的DllImport声明是错误的.特别是使用Int64(longs)而不是UInt32.

以下是PInvoke参考的一些细节:http://www.pinvoke.net/default.aspx/user32.mouse_event

[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, 
                               uint dwData,UIntPtr dwExtraInfo);
Run Code Online (Sandbox Code Playgroud)


Ars*_*eny 3

我找到了这个声明

[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, 
    uint dx, 
    uint dy, 
    uint dwData, 
    IntPtr dwExtraInfo);
Run Code Online (Sandbox Code Playgroud)