最近在做一个C#调用C实现的一套接口,采用DLLimport方式,由于C接口函数里面需要传递2个结构体,并且这两个结构体是封装好的并不知道内部构造,在C#里只能用IntPtr,这样传递在没有连上对方的服务器前是没问题的。但连上他们的服务器时,程序就崩溃了,报内存错误,0xc00000054 这个错误 。具体情况是,在C#里面构造了一个结构体(有指定物理结构),在这个结构体内部还有其他2个结构体,并且这2个结构体不知道内部细节,只是用Intptr 代替,在传参数时 使用Marlsh 将结构体转为指针。
请问有没有遇到类似的情况,是怎么解决的?
我已经解决了,把结构体对象转byte[] 传过去就行了。不要知道结构体内部。
需要传两个结构体,而且不知道结构体内部构造。。。这个感觉挺扯淡啊,难不成你这个dll不知道从哪儿弄来的?
结构体的内部构造被封装了,我们用的是DLL看不到具体构造,提供方表示不愿意告诉我们。现在很无助呀
@<渔人>: 这不是扯淡么,提供方不愿意告诉你们,那他为什么愿意提供dll给你???
@顾晓北: 他们对所有用户都没有公开这些信息,其他 用户用C++实现好像不需要知道内部构造,所以他们认为,其他语言也不需要知道噢
@<渔人>: 那你就网上搜一下C#引入dll,传结构体参数,类似这样,然后自己测试吧。。。这挺扯的的,他结构体里面有什么东西谁知道啊?
@顾晓北: C#传结构体还可以用byte[] 类型 可是,这个长度就得不到了!网上的方案是知道结构体的构造的,用C#定义一个类似结构再转成指针传过去就行了。
@<渔人>: 那问提供的人要结构吧,提供的人哪儿那么多事儿,一个结构体都不愿意提供,难不成是怕自己的的垃圾命名被别人笑话吗?
@顾晓北: 我已经解决了,把结构体对象转byte[] 传过去就行了。不要知道结构体内部。
不知道结构体,那就是说结构体不需要你赋值了,那就把函数参数改成IntPtr,传IntPtr.Zero进去试试。
一直是这样传的,但是,明显我那个问题这样是不行的。