是否可以为单独的参数声明不同的字符集选项?
继承人的意思是:
[dllimport("my.dll", charset = charset.Ansi)]
void myfunc(string CharPtrInCPP, StringBuilder WCharPtrInCPP);
问题是c ++函数为文件名采用char *,为收到的数据采用wchar * ...
在c ++中:
void myfuncImpl(char *filename, WCHAR *buffer, int len);
//another method, myfunc, wraps this
答案 0 :(得分:2)
正如已经指出的,您应该能够为每个参数指定MarshalAs。另一种方法是指定默认字符集类型,然后指定奇数输出的编组。例如,
[DllImport("my.dll", CharSet=CharSet.Unicode)]
void myfunc( [MarshalAs( UnmanagedType.LPStr )] String filename,
StringBuilder buffer, int len );
答案 1 :(得分:1)
您应为每个参数指定[MarshalAs]
。
尝试以下方法:
[DllImport("my.dll")]
void myfunc(
[MarshalAs(UnmanagedType.LPStr)] string CharPtrInCPP,
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder WCharPtrInCPP,
int len
);