簡體   English   中英

調用PInvoke函數…使堆棧不平衡

[英]A call to PInvoke function … has unbalanced the stack

每當我調用函數mouse_event時,我都會收到錯誤消息

調用PInvoke函數已使堆棧不平衡。 這可能是因為托管PInvoke簽名與非托管目標簽名不匹配。 檢查PInvoke簽名的調用約定和參數是否與目標非托管簽名匹配。

const int MOUSEEVENTF_LEFTDOWN = 0x02;
    const int MOUSEEVENTF_LEFTUP = 0x04;
    const int MOUSEEVENTF_RIGHTDOWN = 0x08;
    const int MOUSEEVENTF_RIGHTUP = 0x10;

    [System.Runtime.InteropServices.DllImport("user32.dll", CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
    public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);


switch (mouseAction)
        {
            case ENUMMouseAction.LEFTDOWN:
                mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                break;
            case ENUMMouseAction.LEFTUP:
                mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                break;
            case ENUMMouseAction.RIGHTDOWN:
                mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                break;
            case ENUMMouseAction.RIGHTUP:
                mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                break;
        }

我已經嘗試了所有可用的CallingConventions,但似乎都沒有用,任何幫助,

先感謝您。

兩個錯誤:

  • 調用約定應為Stdcall
  • 參數類型都是錯誤的。 前四個參數是uint ,最后一個參數是UIntPtr

閱讀文檔時需要注意。 可以在這里找到: https : //msdn.microsoft.com/en-us/library/windows/desktop/ms646260.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM