C# 调用dll ,输出参数UTF8编码

zq1564171310 2014-11-25 03:21:56
[DllImport("User.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern string getName(byte[] id,StringBuilder name);
用id,从dll中获取name,
id为入参
name为出参

string id = “abc”;
StringBuilder str = new StringBuilder (1024);
调用getName(Encoding.UTF8.GetBytes(id),str);
string s = str.toString();
s为乱码;

怎么获取UTF8的出参?

...全文
344 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[DllImport("User.dll", CharSet= CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern string getName(byte[] id,Byte[] name);
zq1564171310 2014-11-25
  • 打赏
  • 举报
回复
引用 7 楼 sxl514286339 的回复:
我很想知道: StringBuider 对象 可以 跨 托管内存 与 非托管内存?? —— 能跨 托管内存 和 非托管内存 的 大部分都是 struct 类型 或 struct 类型的数组 吧。 —————————————————————— 换言之:你往 C++ 中传一个 C++ 没有的类型,是不是 不大好?? —————————————————————— 确定一下 User.dll 中 的 getName 到底是 什么参数。
StringBuider 可以的,而且string都可以,只是收到数据中文乱码,英文数字正常
吹风的兔子 2014-11-25
  • 打赏
  • 举报
回复
我很想知道: StringBuider 对象 可以 跨 托管内存 与 非托管内存?? —— 能跨 托管内存 和 非托管内存 的 大部分都是 struct 类型 或 struct 类型的数组 吧。 —————————————————————— 换言之:你往 C++ 中传一个 C++ 没有的类型,是不是 不大好?? —————————————————————— 确定一下 User.dll 中 的 getName 到底是 什么参数。
Mittermeyer 2014-11-25
  • 打赏
  • 举报
回复
抱歉,刚才忘了一点,声明也需要修改: [DllImport("User.dll", CallingConvention = CallingConvention.Cdecl)] public static extern string getName(byte[] id,Byte[] name); 有关API调用,可以参考这里:http://blog.csdn.net/mittermeyer/article/details/1586867,很多年前写的东西。
zq1564171310 2014-11-25
  • 打赏
  • 举报
回复
引用 4 楼 Mittermeyer 的回复:
可以这么写: string id = “abc”; Byte[] buf = new Byte[1024]; getName(Encoding.UTF8.GetBytes(id),buf); string s = System.Text.UTF8Encoding.UTF8.GetString(buf);
似乎这个连数据都收不到,直接闪退了,没有注意在哪闪退了,连log都没刷
Mittermeyer 2014-11-25
  • 打赏
  • 举报
回复
可以这么写: string id = “abc”; Byte[] buf = new Byte[1024]; getName(Encoding.UTF8.GetBytes(id),buf); string s = System.Text.UTF8Encoding.UTF8.GetString(buf);
zq1564171310 2014-11-25
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你先确认对方是什么编码,你不能随便搞
对方UTF8,很确定
zq1564171310 2014-11-25
  • 打赏
  • 举报
回复
对方UTF8,很确定
bdmh 2014-11-25
  • 打赏
  • 举报
回复
你先确认对方是什么编码,你不能随便搞

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧