首页 新闻 会员 周边

有关C#调用C接口的一个问题,请大神们看看我写的对不对。

0
悬赏园豆:20 [已解决问题] 解决于 2014-11-12 10:10

我在C#调用C接口时,出现C接口返回数据乱码的情况,默认的编码都是UTF-8,现在我怀疑是否是我C接口返回数据时,我的结构体转化出错。

 

请大神们帮我看看,谢谢。

 

代码如下:

 

C:

 

C#:

Int类型的标记,是我随便写的。

 

C 接口:

 

C# 对应接口:

 

C# 回调函数:

 

问题补充:

排除使用unsafe

@Sunth的主页 @Sunth | 初学一级 | 园豆:134
提问于:2014-11-11 16:50
< >
分享
最佳答案
2

回调函数的第二个参数不对吧,应该是一个结构体指针吧

收获园豆:10
jello chen | 大侠五级 |园豆:7336 | 2014-11-11 23:07

C里是指针,C#中我在不用unsafe的情况下,我该怎么传值?谢谢回答。

@Sunth | 园豆:134 (初学一级) | 2014-11-12 09:03
盆栽盆栽 | 园豆:207 (菜鸟二级) | 2014-11-12 09:44

@盆栽盆栽: 谢谢,数据已取到,现在还剩汉字的编码问题。

@Sunth | 园豆:134 (初学一级) | 2014-11-12 10:10

@@Sunth:嗯,最好也指定下struct的charset

jello chen | 园豆:7336 (大侠五级) | 2014-11-12 10:32
其他回答(1)
1

C#对应接口加上CharSet = CharSet.Unicode试试

[DllImport("zjrawapi.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
收获园豆:10
dudu | 园豆:30994 (高人七级) | 2014-11-11 17:21

第三方的库使用QT开发的,数据的默认编码都是utf-8. dudu 我的结构体没有什么错误吧?谢谢。

支持(0) 反对(0) @Sunth | 园豆:134 (初学一级) | 2014-11-11 17:29

@@Sunth: 

加上[FieldOffset()]试试

参考:Getting garbage data when marshalling C structure with union to C# code

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2014-11-11 18:06

@dudu: 谢谢 @dudu 还是有问题,返回的值还是乱码。也有返回值String类型的接口,调用是没问题的,看了这个结构体还是有问题。

支持(0) 反对(0) @Sunth | 园豆:134 (初学一级) | 2014-11-11 21:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册