最近在做一个程序,想把某些功能用C++写成DLL供C#调用,但是在写好DLL用C#传递字符串参数时,在DLL中显示传送过来的字符串是乱码,DLL里的代码根本无法用这些字符串进行其它的处理.为此,花了一天时间在全网翻了一遍,发现没有一篇能完美的解决问题的,当然也有部分的提示是正确的.在经过一翻调试后.终于找到解决问题的办法,在此写下以备忘,也给需要的人参考,水平有限,高手略过了.过程如下:
建立C++ DLL的项目要进行字符集设置,使用多字节字符集,如图
DLL的代码如下:
extern "C"_declspec(dllexport) int Strc(char str[]) { MessageBox(NULL,str,(LPCSTR)"提示",MB_OK); return 0; }
建立C#项目代码如下:
[DllImport("CPPDemo.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)] public static extern bool Strc(byte[] sourceStr); string stringStr = "测试的字符串"; bool returnStr = CPPDLL.Strc(Encoding.Default.GetBytes(stringStr));
运行的结果如下图所示: