返回信息流使用C#写代码的时候调用了C++的DLL,但其中需要传递一个结构体数组,例如该结构体数组为
struct feat;
需要返回feat[20];
在C#代码中使用DLLIMPORT导入时,我是这样写的
extern static void function([out,Marshalas(unmagedType.LpArray)]out Feat[] feature);
Feat是在C#中定义的与feat对应的结构体,但是最后返回的时候我在调试的时候看了feature中的内容为Function.Feat[]
因为没有系统的学过C#,而且在MSDN上也没有找到相似的例子,不知道这个问题该怎么解决了,望大侠赐教。急!!!
PS:这里的代码都是凭记忆写的,所以细节部分可能有问题。
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2370同步于 2010/9/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
Marshal相关,C#调用C++的DLL,结构体数组
AHU
2010/9/27镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
这个是公司的一个项目,公司也不能上网,项目也是保密项目,所以我没法拿到代码,不知道意思是否表达清楚了,其实就是如何将C++中的结构体数组传递到C#中来,因为是用的DLL,所以在DllImport时需要使用MarshalAs来进行转换
【 在 ahomer 的大作中提到: 】
: 贴代码,传C++的dll,或者上传一个可运行的工程吧~
结构需要layout定义内存布局。并且数组空间需要已开辟
【 在 AHU (LYFE) 的大作中提到: 】
: 使用C#写代码的时候调用了C++的DLL,但其中需要传递一个结构体数组,例如该结构体数组为
: struct feat;
: 需要返回feat[20];
: ...................
首先字节要对其,然后事先要把相应的内存申请好再穿进去,MSDN上有关于跨语言调用的详细资料
【 在 AHU 的大作中提到: 】
: 使用C#写代码的时候调用了C++的DLL,但其中需要传递一个结构体数组,例如该结构体数组为
: struct feat;
: 需要返回feat[20];
: ...................
恩自己解决了,原因是ARRAY中的结构必须是C-STYLE或者是MANAGED的,应该是不能使用自定义的结构体,只能在C++中使用一个VECTOR或者是LIST将这个结构体串存下来,然后再按INDEX一个一个的取
【 在 AHU 的大作中提到: 】
: 使用C#写代码的时候调用了C++的DLL,但其中需要传递一个结构体数组,例如该结构体数组为
: struct feat;
: 需要返回feat[20];
: ...................