Envelopper DLL native pour C#

J'ai écrit une DLL C++ et maintenant, j'ai besoin d'appeler une fonction native à partir d'une application gérée.

De l'export natif de la fonction s'affiche comme ceci:

extern "C" __declspec(dllexport) 
bool NativeMethod(char *param1, char *param2, char *result);

Donc, à partir de C# je vais appeler cette fonction en passant par 2 entrée params, 1 sortie param et, évidemment, je vais lire le retour bool valeur.

J'ai essayé d'envelopper tout cela dans beaucoup de façons, mais toujours je reçois un PInvokeStackImbalance exception.
La seule façon que je sais d'appel de fonction native est en appliquant CallingConvention = CallingConvention.Cdecl).NET déclaration de fonction. Cependant, de cette façon, je ne suis pas en mesure de lire la sortie de param (c'est la chaîne vide toujours) et aussi de la valeur de retour est toujours vrai.

ce que l'importation ont u essayé?
J'ai essayé quelque chose comme: [DllImport("Madll", point d'entrée = "NativeMethod")] public static extern Boolean NativeMethod(string param1, chaîne param2, chaîne param3); Également avec param3 ou StringBuilder ou MarshalAs(UnmanagedType.LPStr)]
Vous vous rendez compte que ce paramètre de sortie ne fonctionne pas, droite? C# chaînes sont immuable.
[DllImport("MyDll.dll", Point D'Entrée = "NativeMethod", CallingConvention = CallingConvention.Cdecl)] static extern bool NativeMethod( [MarshalAs(UnmanagedType.LPStr)]chaîne param1, [MarshalAs(UnmanagedType.LPStr)]chaîne param2, [MarshalAs(UnmanagedType.LPStr)]chaîne param3); - chk ma réponse!

OriginalL'auteur bit | 2013-02-03