我编写了一个使用Dllimport的程序。这对我来说很有意思,如果我需要分配一些内存并将指针返回C#作为IntPtr,如何释放它?
答案 0 :(得分:3)
将IntPtr
传递回你的dll,这样就可以释放内存。
答案 1 :(得分:2)
首先,不要这样做!您正在破坏托管语言的最大好处之一 - 您必须自己管理资源。
尽管如此,如果真的需要这个,你可以。
首先,本机dll必须提供自己的无内存功能。而且,只需使用它!
代码可能是这样的:
static class Program
{
[DllImport("foo.dll")]
private static IntPtr myfooalloc();
[DllImport("foo.dll")]
private static void myfoofree(IntPtr p);
static void Main(String[] args)
{
IntPtr p = myfooalloc();
// Do something
myfoofree(p);
}
}
或者,更安全:
IntPtr p = myfooalloc();
try
{
// Do something
}
finally
{
myfoofree(p);
}
答案 2 :(得分:0)
一般而言,图书馆的设计应使您不需要做这些事情(一端分配,另一端免费)。但当然也有例外,因此您通常需要使用OS API函数来分配内存。那么,这取决于库,所以通常没有正确答案。
因此,除非另有说明,否则不需要这样做。