2009-03-27 10 views
2

Duplizieren von Interop sending string from C# to C++Interop Zeichenfolge von C# C++

Senden Ich möchte eine Zeichenfolge von C# zu einer Funktion in einer nativen C++ DLL senden.

Hier ist mein Code:

Die C# Seite:

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

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

der Seite ++ C:

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

Was ich in der C++ Seite erhalten, ist ein leerer String, jedes Mal, egal was ich sende. Hilfe?

Ich habe es bereits hier schon einmal gefragt, aber ich habe keine Antwort bekommen, die funktioniert hat.

Danke.

Antwort

0

Versuchen

MarshalAs(UnmanagedType.BStr) 

für String-Typen, die Sie vorbei an Verfahren zu setzen. extern "C" Leere __stdcall func1 (wchar_t * path)

Wenn das nicht, versuchen Sie hilft anstelle einer Zeichenfolge einen String vorbei:

0

Sie sollten Ihre C++ func wie folgt erklären.

(Disclaimer: Ich habe nie Unicode tatsächlich Code-Strings übergeben, so dass, wenn keine der oben genannten Vorschläge funktioniert, dann nur aa Test, könnte man mit „Ansi“ statt nur versuchen, um zu sehen, was passiert.)

3

Sie müssen

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

in diesem Fall (wchar_t*). Und achten Sie auf die Aufrufkonvention, wie @danbystrom es vorschlägt.

Verwandte Themen