C#传参 C++(怕是又遇到编码问题)

2017-10-09 10:32:12 +08:00
 justou
一个 c++函数接收一个 const char* names[]参数, c#那边调用这个函数如何传参的问题.

如果仅仅是 ascii 字符串, 像传递这样的参数没问题, string[] abc = { "contents", "title" };

但是传递 string[] abc = { "正文", "标题" }就有问题了, 字符串传递不全, 如何解决?

这儿有个 vs2013 工程可供测试:
链接: http://pan.baidu.com/s/1gfrMbtx 密码:yskx
1968 次点击
所在节点    程序员
7 条回复
Magentaize
2017-10-09 12:26:38 +08:00
MessageBoxW
Magentaize
2017-10-09 12:39:30 +08:00
但是使用 utf8 无疑是更加合理的做法
justou
2017-10-09 12:42:34 +08:00
@peoleser 试了下, 不得行呢. MessageBox 在这儿也许不太合适, 可以把函数改为:

void stringtest(int nCount, const char* stringArray[])
{
ofstream of;
of.open("test.txt");
of << stringArray[0] << ", " << stringArray[1] << endl;

of << "正文, 标题" << endl;
}


只要把正确的字节传递过来就好了, 不管它具体什么编码, 这里就是没接收到完整的字节
justou
2017-10-09 12:45:52 +08:00
c#那边也这样试过:
extern static void stringtest(int nCount, byte[][] stringArray);

byte[][] abc = { Encoding.UTF8.GetBytes("正文"), Encoding.UTF8.GetBytes("标题") };

但是有运行时错误, 嵌套的数组不支持封送处理.
Magentaize
2017-10-09 13:11:22 +08:00
你的代码里用的是 MessageBoxA,该函数只能处理短字符( ANSI ),换成 MessageBoxW 同时把函数签名里的 char*换为 LPCWSTR
hjc4869
2017-10-09 13:17:14 +08:00
C++那边换成 wchar_t,然后 C#这边把 dllimport 的 charset 设置成 unicode
justou
2017-10-09 15:58:23 +08:00
@peoleser
@hjc4869 可行, 就是这个 charset 设置问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396083

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX