Je dois appeler une DLL C++ à partir de mon programme C#. Je suis en train de le faire en utilisant PInvoke - tout fonctionne bien dans VS2005 \ 2008, mais après la migration vers VS 2010, je reçois cette exception:Pointeur de structure Marshal dans VS2010
PInvokeStackImbalance a été détecté Message: Un appel à la fonction PInvoke ' sampleFunc 'a déséquilibré la pile. Cela est probablement dû au fait que la signature PInvoke gérée ne correspond pas à la signature cible non gérée . Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non gérée
C'est le prototype C++ d'origine:
typedef struct {
unsigned short field1;
unsigned short field2;
} sInfo;
_declspec(dllexport) int sampleFunc(sInfo *info, char *txt);
et voici le code C#:
[StructLayout(LayoutKind.Sequential)]
struct SInfo
{
//[MarshalAs(UnmanagedType.U1)] //also tried with the MarshalAs attr. Didn't help.
public ushort field1;
//[MarshalAs(UnmanagedType.U1)]
public ushort field2;
};
[DllImport("sampleModule.dll", CharSet=CharSet.Ansi)]
public static extern int sampleFunc(ref SInfo info, [MarshalAs(UnmanagedType.LPStr)] string txt);
Je l'ai essayé aussi avec IntPtr au lieu de l'arbitre sInfo, mais nous avons eu le même résultat ...
Toute aide sera appréciée,
Merci à tous!
Cela ne peut pas être, un pointeur vers la structure est transmis. –