2011-01-07 10 views
2

Kann man verschiedene charset-Optionen für separate params deklarieren?anderer charset für mehrere params mit dllimport

heres, was ich meine:

[dllimport("my.dll", charset = charset.Ansi)] 
void myfunc(string CharPtrInCPP, StringBuilder WCharPtrInCPP); 

das Problem ist die C++ Funktion einen char * für den Dateinamen nimmt und eine wchar * für die Daten empfangen zurück ...

in C++:

void myfuncImpl(char *filename, WCHAR *buffer, int len); 
//another method, myfunc, wraps this 

Antwort

2

Wie bereits erwähnt, sollten Sie in der Lage sein MarshalAs für jeden Parameter angeben. Eine andere Möglichkeit wäre, einen Standardzeichensatztyp anzugeben und dann das Marshalling für das ungerade auszugeben. Beispiel:

[DllImport("my.dll", CharSet=CharSet.Unicode)] 
    void myfunc([MarshalAs(UnmanagedType.LPStr)] String filename, 
       StringBuilder buffer, int len); 
+0

Eek, keine Zeichenfolge für den Rückschreibpuffer. StringBuilder. –

+0

@Hans, Ah ja. Ich sollte eigentlich die Frage lesen. Danke, dass du das bemerkt hast. –

1

Sie sollten [MarshalAs] für jeden Parameter angeben.

Versuchen Sie Folgendes:

[DllImport("my.dll")] 
void myfunc(
    [MarshalAs(UnmanagedType.LPStr)] string CharPtrInCPP, 
    [MarshalAs(UnmanagedType.LPWStr)] StringBuilder WCharPtrInCPP, 
    int len 
    );