2 Stimmen

Interop Senden von Strings von C# nach C++

Duplikat von Interop Senden von Strings von C# nach C++

Ich möchte eine Zeichenfolge von C# an eine 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);
}

Die C++-Seite:

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

Auf der C++-Seite erhalte ich jedes Mal eine leere Zeichenfolge, egal was ich sende. Hilfe?

Ich habe diese Frage hier schon einmal gestellt, aber ich habe keine Antwort bekommen, die funktioniert.

Danke.

3voto

Anton Tykhyy Punkte 18869

Sie benötigen

[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 vorschlägt.

1voto

patrick Punkte 14856

Haben Sie das gelesen?

Standard-Marshaling für Strings

http://msdn.microsoft.com/en-us/library/s9ts558h(VS.71).aspx

0voto

Vinay Punkte 4723

Versuchen Sie, die

MarshalAs(UnmanagedType.BStr)

für den Stringtyp, den Sie an die Methode übergeben.

0voto

Dan Byström Punkte 8850

Sie sollten Ihre C++-Funktionen wie folgt deklarieren: extern "C" void __stdcall func1(wchar_t *path)

Wenn das nicht hilft, versuchen Sie, einen StringBuilder anstelle eines Strings zu übergeben.

(Disclaimer: Ich habe noch nie Unicode-Code-Strings übergeben, wenn also keiner der obigen Vorschläge funktioniert, könnten Sie es testweise mit "Ansi" versuchen, um zu sehen, was passiert).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X