2009-03-27 9 views
2

en double de Interop sending string from C# to C++Interop envoi chaîne de C# à C++

Je veux envoyer une chaîne de C# à une fonction dans un natif C++ DLL.

Voici mon code:

Le côté C#:

[DllImport(@"Native3DHandler.dll", EntryPoint = "#22", CharSet = CharSet.Unicode)] 
private static extern void func1(string str); 

public void func2(string str) 
{ 
    func1(str); 
} 

Le côté C:

void func1(wchar_t *path) 
{ 
    //... 
} 

Ce que je reçois dans le côté C est une chaîne vide, à chaque fois, peu importe ce que j'envoie. Aidez-moi?

Je l'ai déjà demandé ici auparavant, mais je n'ai pas obtenu une réponse qui a fonctionné.

Merci.

Répondre

0

Essayez de mettre

MarshalAs(UnmanagedType.BStr) 

pour le type de chaîne que vous passez à la méthode.

0

Vous devez déclarer votre func C++ comme ceci: extern __stdcall vide func1 "C" (wchar_t * chemin)

Si cela ne fonctionne pas, essayez passer un StringBuilder au lieu d'une chaîne.

(Disclaimer: Je ne l'ai jamais fait passé des chaînes de code Unicode, donc si aucune des suggestions ci-dessus fonctionnent, puis juste aa test, vous pouvez essayer avec « Ansi » au lieu juste pour voir ce qui se passe.)

3

vous avez besoin

[DllImport(@"Native3DHandler.dll", EntryPoint = "#22", CharSet = CharSet.Unicode)] 
private static extern void func1 ([MarshalAs (UnmanagedType.LPWSTR)] string str) ; 

dans ce cas (wchar_t*). Et faites attention à la convention d'appel, comme le suggère @danbystrom.