首页 新闻 会员 周边

C#调用C的接口关于指针的传递

0
悬赏园豆:50 [已解决问题] 解决于 2016-08-03 17:33

最近在做一个C#调用C实现的一套接口,采用DLLimport方式,由于C接口函数里面需要传递2个结构体,并且这两个结构体是封装好的并不知道内部构造,在C#里只能用IntPtr,这样传递在没有连上对方的服务器前是没问题的。但连上他们的服务器时,程序就崩溃了,报内存错误,0xc00000054 这个错误 。具体情况是,在C#里面构造了一个结构体(有指定物理结构),在这个结构体内部还有其他2个结构体,并且这2个结构体不知道内部细节,只是用Intptr 代替,在传参数时 使用Marlsh 将结构体转为指针。

请问有没有遇到类似的情况,是怎么解决的?

<渔人>的主页 <渔人> | 初学一级 | 园豆:53
提问于:2016-08-02 10:33
< >
分享
最佳答案
0

我已经解决了,把结构体对象转byte[] 传过去就行了。不要知道结构体内部。

<渔人> | 初学一级 |园豆:53 | 2016-08-03 17:31
其他回答(2)
1

需要传两个结构体,而且不知道结构体内部构造。。。这个感觉挺扯淡啊,难不成你这个dll不知道从哪儿弄来的?

收获园豆:30
顾晓北 | 园豆:10844 (专家六级) | 2016-08-02 10:37

结构体的内部构造被封装了,我们用的是DLL看不到具体构造,提供方表示不愿意告诉我们。现在很无助呀

支持(0) 反对(0) <渔人> | 园豆:53 (初学一级) | 2016-08-02 11:04

@<渔人>: 这不是扯淡么,提供方不愿意告诉你们,那他为什么愿意提供dll给你???

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-08-02 11:05

@顾晓北: 他们对所有用户都没有公开这些信息,其他 用户用C++实现好像不需要知道内部构造,所以他们认为,其他语言也不需要知道噢

支持(0) 反对(0) <渔人> | 园豆:53 (初学一级) | 2016-08-02 11:12

@<渔人>: 那你就网上搜一下C#引入dll,传结构体参数,类似这样,然后自己测试吧。。。这挺扯的的,他结构体里面有什么东西谁知道啊?

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-08-02 11:16

@顾晓北: C#传结构体还可以用byte[] 类型 可是,这个长度就得不到了!网上的方案是知道结构体的构造的,用C#定义一个类似结构再转成指针传过去就行了。

支持(0) 反对(0) <渔人> | 园豆:53 (初学一级) | 2016-08-02 11:24

@<渔人>: 那问提供的人要结构吧,提供的人哪儿那么多事儿,一个结构体都不愿意提供,难不成是怕自己的的垃圾命名被别人笑话吗?

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-08-02 11:28

@顾晓北: 我已经解决了,把结构体对象转byte[] 传过去就行了。不要知道结构体内部。

支持(0) 反对(0) <渔人> | 园豆:53 (初学一级) | 2016-08-03 17:30
0

不知道结构体,那就是说结构体不需要你赋值了,那就把函数参数改成IntPtr,传IntPtr.Zero进去试试。 

收获园豆:20
ArthurLi | 园豆:686 (小虾三级) | 2016-08-02 11:35

一直是这样传的,但是,明显我那个问题这样是不行的。

支持(0) 反对(0) <渔人> | 园豆:53 (初学一级) | 2016-08-04 08:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册