2016-05-22 8 views
0

Jedesmal, wenn ich die Funktion mouse_event ich den Fehler nennen unausgeglichenEin Aufruf von PInvoke Funktion ... hat den Stapel

Ein Aufruf von PInvoke Funktion unausgewogen den Stapel hat. Dies liegt wahrscheinlich daran, dass die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur übereinstimmt. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Ziel-Signatur übereinstimmen.

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; 
     } 

Ich habe versucht, alle verfügbaren CallingConventions und keiner scheint zu funktionieren, würde jede Hilfe zu erkennen ist,

Vielen Dank im Voraus.

Antwort

1

Zwei Fehler:

  • Die Aufrufkonvention Stdcall sein sollte.
  • Die Parametertypen sind alle falsch. Die ersten vier Parameter sind uint und der letzte Parameter ist UIntPtr.

Sie müssen beim Lesen der Dokumentation vorsichtig sein. Es kann hier gefunden werden: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260.aspx

+0

Vielen Dank für Ihre Hilfe, ich werde als Antwort markieren, sobald ich darf. Ich war nur ziemlich verwirrt, da es in einem früheren Projekt funktioniert hatte, aber ich nehme an, dass .NET Framework Version 3.5 verwendet wurde. –

+0

Dieser Code war immer falsch. Wenn es jemals funktioniert hat, war es rein zufällig. –

Verwandte Themen