2011-01-07 68 views
2

是否有可能爲單獨的參數聲明不同的字符集選項?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

Eek,不是回寫緩衝區的字符串。 StringBuilder的。 – 2011-01-08 00:20:58

1

您應該爲每個參數指定[MarshalAs]

嘗試以下操作:

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