c#封装好多问题
在封装华为esdk时一直不成功,终于发现是:
1. 结构体中封装域编码为string时,正常应该是32位长度,但总是少得到1位数,最后改为byte[]封装后正确。需要把byte[]转为string
2. 函数参数const char*在传递域编码时也是出错,需转为intptr后传入Marshal.PtrToStringAnsi。使用后需 FreeHGlobal内存。
3. 结构体中中文封装string正常,若不行的话也可封装为byte[],但转为中文时需要 System.Text.Encoding.GetEncoding("GB2312").GetString(byte[]),SDK中可能是GB2312编码
有点搞不懂的是:只有域编码这个封装会出问题,其他都正常。无论这个域编码是在struct中,还是在函数参数中。
最后发现是由于函数中加了CharSet = CharSet.Unicode造成的,删除这个字符集后就不用ptr了,直接用string就可以了。如下:
[DllImport(dllp + "IVS_SDK.dll", CharSet = CharSet.Unicode]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2007-05-08 Python中的数组
2007-05-08 马的遍历(Python版)