与dllimport的多个params的不同的charset

时间:2011-01-07 23:37:05

标签: c# c++ interop

是否可以为单独的参数声明不同的字符集选项?

继承人的意思是:

[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

2 个答案:

答案 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
   );