问题
Is it possible to declare different charset options for seperate params?
heres what i mean:
[dllimport("my.dll", charset = charset.Ansi)]
void myfunc(string CharPtrInCPP, StringBuilder WCharPtrInCPP);
the problem is the c++ function takes a char* for the filename and a wchar* for the data recieved back...
in c++:
void myfuncImpl(char *filename, WCHAR *buffer, int len);
//another method, myfunc, wraps this
回答1:
As already pointed out, you should be able to specify MarshalAs for each parameter. Another way would be to specify a default character set type and then specify the marshalling for the odd one out. For example,
[DllImport("my.dll", CharSet=CharSet.Unicode)]
void myfunc( [MarshalAs( UnmanagedType.LPStr )] String filename,
StringBuilder buffer, int len );
回答2:
You should specify [MarshalAs] for each parameter.
Try the following:
[DllImport("my.dll")]
void myfunc(
[MarshalAs(UnmanagedType.LPStr)] string CharPtrInCPP,
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder WCharPtrInCPP,
int len
);
来源:https://stackoverflow.com/questions/4631267/different-charset-for-multiple-params-with-dllimport