C # - PInvokeStackImbalance détecté sur une fonction bien documentée?
Voici mon code pour un ClickMouse() fonction:
[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);
}
Pour quelque raison, quand mon programme pour ce code, il met ce message d'erreur:
PInvokeStackImbalance a été détecté Message: Un appel à la fonction PInvoke
'WindowsFormsApplication1!WindowsFormsApplication1.Form1::mouse_event'
a déséquilibré la pile. C'est probablement parce que la gestion de PInvoke
la signature ne correspond pas à la non géré cible signature. Vérifiez que
la convention d'appel et les paramètres de la PInvoke correspondance de signature
la cible non géré signature.
S'il vous plaît aider?
source d'informationauteur Aaron Hammond
Vous devez vous connecter pour publier un commentaire.
Ressemble votre DllImport déclaration est fausse. En particulier, l'utilisation de Int64 (longs), au lieu de UInt32.
Voici quelques détails de la PInvoke référence:
http://www.pinvoke.net/default.aspx/user32.mouse_event
J'ai trouvé cette déclaration
J'ai été en utilisant RealGetWindowClass utilisant le format suivant.
et j'ai été geting le "PInvokeStackImbalance' exception ou d'erreur. Mais quand j'ai changé le CallingConvention à
l'erreur a disparu. Je suis à l'aide de VS2010 sur un ordinateur 64 bits.
De fixer PInvokeStackImbalance erreur:
Presse: CTRL + ALT + E
Sous "Géré Assistants de Débogage", décochez PInvokeStackImbalance
J'ai changé "Cdecl" à "StdCall" mais il ne fonctionne pas.
Que Scott Weinstein mentionné que nous devrions utiliser le type int.