处理c#中的非托管内存

Dealing with unmanaged memory in c#

本文关键字:内存 处理      更新时间:2023-10-16

我在C#中使用本机C++dll,如下所示:

C++函数:

poly* f1(/*some input data*/);
double* f2(poly* p);

在c#中,我正在做:

(这是通过适当地使用不安全和固定的块来完成的,所以不用担心)

void* ptr  = f1(/*input data*/);
double[] result = f2(ptr);

现在,如果我从f2打印数据,我会得到一些损坏的垃圾值。有些值是正确的。我想知道,是因为把它保存在空指针ptr中吗?还是这很好,而原因又是另一回事?

我猜marshaller无法自动将double*转换为double[],因为它不知道数组有多长,而且可能还有很多其他问题。理想情况下,你必须至少给我们C++中的头文件,C#中DllImported外部方法的声明,然后我们可以更深入地研究:)