2016-05-22 14 views
0

毎回はのPInvoke関数の呼び出し...私は、私はエラーを取得する関数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とどれもが動作しているようです試してみましたが、すべてのヘルプは

は、事前にありがとう、いただければ幸いです。

答えて

1

つのミス:

  • 呼び出し規約はStdcallする必要があります。
  • パラメータタイプがすべて間違っています。最初の4つのパラメータはuintで、最後のパラメータはUIntPtrです。

ドキュメントを読むときには注意が必要です。それはここに見つけることができます:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260.aspx

+0

あなたの助けをありがとう、私は私が許可されるとすぐに答えとしてマークします。以前のプロジェクトで作業して以来、かなり混乱していましたが、.NET Frameworkバージョン3.5を使用していると仮定しています。 –

+0

そのコードは常に間違っていました。それがうまくいけば純粋に偶然でした。 –

関連する問題