Après le passage à VS2010, la gestion de débogage assistant affiche un message d'erreur relatif à un déséquilibre de la pile à partir d'un appel à un le C++ une fonction à partir d'une application en C#.
Le conventuelles suspects ne semblent pas être la cause du problème. Est-il autre chose que je doit vérifier? Le VS2008 construit dll C++ et C# application n'a jamais eu de problème, pas de bizarre ou de mystérieux insectes - oui, je sais, ça ne veut pas dire grand-chose.
Voici les choses qui ont été vérifiés:
- Le nom de la dll est correct.
- Le nom de point d'entrée est correcte et a été vérifié avec depends.exe - le code a utiliser le nom décomposé et il le fait.
- La convention d'appel est correct.
- Les tailles et tous les types semblent corrects.
- Le jeu de caractères est correct.
- Il ne semble pas y avoir de problèmes après en ignorant l'erreur et il n'y a pas un problème lors de l'exécution à l'extérieur du débogueur.
C#:
[DllImport("Correct.dll", EntryPoint = "SuperSpecialOpenFileFunc", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true)]
public static extern short SuperSpecialOpenFileFunc(ref SuperSpecialStruct stuff);
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
public struct SuperSpecialStruct
{
public int field1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string field2;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string field3;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string field4;
public ushort field5;
public ushort field6;
public ushort field7;
public short field8;
public short field9;
public uint field10;
public short field11;
};
C++:
short SuperSpecialOpenFileFunc(SuperSpecialStruct * stuff);
struct SuperSpecialStruct
{
int field1;
char field2[256];
char field3[20];
char field4[10];
unsigned short field5;
unsigned short field6;
unsigned short field7;
short field8;
short field9;
unsigned int field10;
short field11;
};
Voici le message d'erreur:
Géré Assistant Débogage 'PInvokeStackImbalance' a détecté un problème dans 'application Gérée chemin".
Informations supplémentaires: Un appel à l' PInvoke fonction 'SuperSpecialOpenFileFunc' a déséquilibrée de la pile. C'est probable parce que la gestion de PInvoke signature ne correspond pas à la cible non géré la signature. Vérifiez que l'appel convention et les paramètres de l' PInvoke signature correspondre à la cible non géré signature.