2011-01-07 8 views
2

別々のパラメータに対して異なる文字セットオプションを宣言できますか? HERESにdllimportを使用した複数のパラメータの異なる文字セット

は、私が何を意味するか:

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

問題は、C++の機能が戻って受け取ったデータのファイル名とのwchar *のため、char *を取りますが... C++で

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

答えて

2

すでに指摘したように、あなたは各パラメータのMarshalAsを指定することができるはずです。別の方法は、デフォルトの文字セット型を指定し、奇数のマーシャリングを指定することです。たとえば、

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

書き戻しバッファの文字列ではありません。 StringBuilder。 –

+0

@ハンス、ああ。私は実際にその質問を読むべきです。それに気づいてくれてありがとう。 –

1

各パラメータに[MarshalAs]を指定する必要があります。

は、以下のことを試してみてください。

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