C#中的string转换成C++中的char[ ]

在日常的编程中,常常遇到C#和C++联合编程,在这过程中就可能遇到从C#中把string类型的数据传到C++的dll文件中,对应的在C++中是char[ ]类型。(C#中的char[ ]对应C++中的wchar_t[ ] )代码如下:
在C#中:
unsafe
{
fixed( char* p = &(stress.ToCharArray()[0]))
{
WriteString§; ///<这是dll文件里的函数
}
} ///<fixed函数允许定义指向要进入托管类型函数的指针,并且必须在unsafe环境下,不然指针会很快被垃圾回收器回收
///<&(stress.ToCharArray()[0])是将string转换成字符数组,并获取首地址
在dll文件中:
char* stress;
__declspec(dllexport) void __stdcall WriteString(wchar_t* pWCStrKey)
{
int pSize = WideCharToMultiByte(CP_OEMCP, 0, pWCStrKey, wcslen(pWCStrKey), NULL, 0, NULL, NULL);
char* pCStrKey = new char[pSize + 1];
//第二次调用将双字节字符串转换成单字节字符串
WideCharToMultiByte(CP_OEMCP, 0, pWCStrKey, wcslen(pWCStrKey), pCStrKey, pSize, NULL, NULL);
pCStrKey[pSize] = ‘\0’;
stress = pCStrKey;
}///<这段代码已经不记得是在哪篇博客里看到的,本人水平有限,还不太懂里面的原理,不过亲测有效

这样就可以调用stress了。
如果还不会怎样生成dll文件,可以转到如下链接:
C#调用C++的dll

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值