最近在做一个程序,想把某些功能用C++写成DLL供C#调用,但是在写好DLL用C#传递字符串参数时,在DLL中显示传送过来的字符串是乱码,DLL里的代码根本无法用这些字符串进行其它的处理.为此,花了一天时间在全网翻了一遍,发现没有一篇能完美的解决问题的,当然也有部分的提示是正确的.在经过一翻调试后.终于找到解决问题的办法,在此写下以备忘,也给需要的人参考,水平有限,高手略过了.过程如下:

建立C++ DLL的项目要进行字符集设置,使用多字节字符集,如图

关于C#调用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));

运行的结果如下图所示:

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

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-22
  • 2022-12-23
  • 2021-12-08
  • 2022-02-10
  • 2022-01-09
相关资源
相似解决方案