C#调c++ dll,函数参数为指向指针的指针的输出参数,需要在外面释放内存,如何调用

fengfeng2003 2006-07-16 03:47:40
c++ dll函数声明大概如下

void fun(double** DoubleArray)
{
}

DoubleArray是dll在函数内部分配的内存,按照调用规则需要在使用完doubleArray后,自己释放内存。这个在c++程序里面很容易,但是在C#里面应该怎么做呢,怎么写声明,如何释放内存
...全文
483 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengfeng2003 2006-07-21
  • 打赏
  • 举报
回复
再up

关键是没有办法封装,因为dll传出的数组元素个数是不确定的
柒数信息 2006-07-18
  • 打赏
  • 举报
回复
这样转来转去很麻烦,以前我做的时候用c++托管代码把c++代码封装一下,然后在C#就可以直接用了,用起来和其他的.net类库一样方便
flycrystal 2006-07-17
  • 打赏
  • 举报
回复
Marshal.FreeHGlobal(IntPtr hglobal)
evlon 2006-07-17
  • 打赏
  • 举报
回复
因为每个进程在有单独的4G内存。
evlon 2006-07-17
  • 打赏
  • 举报
回复
哪个进程里申请的,应该在哪里释放。

如果C++没有提供,让他们提供,要不会有内存垃圾,
当然也有解决方法,可用用过程线程插入,在C++进程中新建线程来释放,感觉有点像写木马,哈。
mmens 2006-07-17
  • 打赏
  • 举报
回复
不好意思,写错了!
在托管代码中操作非托管类通过这个类进行:System.Runtime.InteropServices.Marshal.
你可以查一下MSDN。:)
mmens 2006-07-17
  • 打赏
  • 举报
回复
将Com计数归0:
System.Runtime.InteropServices.Marshal.ReleaseComObject(object obj);

将Com计数-1:
IntPtr pUnk = Marshal.GetIUnknownForObject(myComObject);
int refCount = Marshal.Release(pUnk);
zhwg1980 2006-07-17
  • 打赏
  • 举报
回复
关注
Fibona 2006-07-17
  • 打赏
  • 举报
回复
指针的指针**到C#用ref来做应该是就行了吧
fengfeng2003 2006-07-17
  • 打赏
  • 举报
回复
首先,在C#中如何声明呢
fengfeng2003 2006-07-17
  • 打赏
  • 举报
回复
再up一下
aSalt 2006-07-16
  • 打赏
  • 举报
回复
可以考虑在C++ 中加一个释放内存的方法.如 ArrayClear(), c# 中调用
fengfeng2003 2006-07-16
  • 打赏
  • 举报
回复
能具体说一下吗
hzw66 2006-07-16
  • 打赏
  • 举报
回复
可能用到这个类:
System.Runtime.InteropServices.Marshal

110,502

社区成员

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

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

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