关于C#调用C++ 的DLL传送字符串显示乱码的解决

最近在做一个程序,想把某些功能用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));

运行的结果如下图所示:

原文地址:https://www.cnblogs.com/billboy/p/4723968.html