c#调用C++ DLL的动态分配的数组

jxtgddlt 2013-05-13 09:27:10
比如:

C++中,
void func(int *array); // array的size不确定,所以想要在C++中new出来 然后传回指针给C#

但我现在每次传都是空指针??


请问我该要怎么写c#代码呢?
才能让array指针正确传回来?
...全文
489 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxtgddlt 2013-05-15
  • 打赏
  • 举报
回复
引用 8 楼 zanfeng 的回复:
乱用还不如不用。c#又不是不能调用内存分配的api.
按你的意思 像这种情况 也就是应该先获取需要分配的数组长度 然后再获取相应数据吗?
gomoku 2013-05-13
  • 打赏
  • 举报
回复
引用 4 楼 jxtgddlt 的回复:
... void func(ref MyStruct []array);
C#的数组是带有长度信息的,C++给个指针,C#如何能猜的出长度呢,没有长度,就没有MyStruct[]? 因此你要用类似void func(ref IntPtr arr, ref int length);的方式。 然后自己转。而且,一般最后你还要调用void DeleteBuffer(Intptr p); 不然,那些C++ new出来的就内存泄露了。 也就是为什么hdt朋友说的“需求不合理”的一个原因。
真相重于对错 2013-05-13
  • 打赏
  • 举报
回复
资源使用的一条原则就是,谁负责New,谁要负责delete,
jxtgddlt 2013-05-13
  • 打赏
  • 举报
回复
引用 3 楼 hdt 的回复:
这个需求不合理
额 咋了? 因为数据的结果是在C++中求得的 如果先返回长度 然后在C#中分配后再获得数据好像有点麻烦。
jxtgddlt 2013-05-13
  • 打赏
  • 举报
回复
引用 1 楼 superliu1122 的回复:
你这样写C++里也及收不到 需要void func(int **array);这样 C#里应该是用 void func(ref IntPtr array);
thx,修正后, c++中, void func(MyStruct **array); C#中, void func(ref MyStruct []array); 但调用的时候 MyStruct []someVariable = null; 用func(ref someVariable); 还是无法正确获得值。 用unsafe fixed也传不了参数。 是要转为IntPtr吗?
真相重于对错 2013-05-13
  • 打赏
  • 举报
回复
这个需求不合理
bdmh 2013-05-13
  • 打赏
  • 举报
回复
加上ref修饰参数
superliu1122 2013-05-13
  • 打赏
  • 举报
回复
你这样写C++里也及收不到 需要void func(int **array);这样 C#里应该是用 void func(ref IntPtr array);
足球中国 2013-05-13
  • 打赏
  • 举报
回复
乱用还不如不用。c#又不是不能调用内存分配的api.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧