Je suis nouveau en C++. J'appelle une fonction C++ de C# en utilisant un PINVOKE et je veux récupérer une chaîne en tant que paramètre out. Cependant, je viens de récupérer une chaîne vide. Le paramètre int out fonctionne correctement.Comment marshall C++ char * en chaîne C# en utilisant P/INVOKE
Importation:
[DllImport (@"UnamanagedAssembly.dll", CharSet = CharSet.Ansi)]
public static extern int Activate(ref int numActivated, StringBuilder eventsActivated);
extern "C" __declspec(dllexport) int Activate(int *p_NumActivated, char *p_EventsActivated) {return Activation::GetInstance()->Activate(p_NumActivated, p_EventsActivated);}
Appel ma fonction C++ de C#:
int numActivated = 0;
StringBuilder eventsActivated = new StringBuilder();
int status = Activate(ref numActivated, eventsActivated);
La fonction C++:
int Activation::Activate(int *p_NumActivated, char *&p_EventsActivated)
{
char *pTemp = "Hello";
p_EventsActivated = pTemp;
*p_NumActivated = 1;
return 0;
}
ne vous ont pas seulement besoin nécessaire d'ajouter soit l'arbitre ou sur mot-clé pour vous la définition de la méthode de la chaîne? – pmcilreavy