我打电话从C#这样的方法:妙传VC++到VC#一个ULONG64阵列和释放内存
[DllImport(@"C:\Hash.dll",
CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr ph_dct_videohash(
string file,
ref int length);
static void Main(string[] args)
{
int length = 0;
ph_dct_videohash(@"C:\Users\shady\H.avi", ref length);
Console.Read();
}
这里是我从图书馆调用方法
ulong64* ph_dct_videohash(const char *filename, int &Length){
CImgList<uint8_t> *keyframes = ph_getKeyFramesFromVideo(filename);
if (keyframes == NULL)
return NULL;
Length = keyframes->size();
ulong64 *hash = (ulong64*)malloc(sizeof(ulong64)*Length);
//some code to fill the hash array
return hash;}
问题是如何在C#中检索未签名的64位Long数组,并在使用它之后释放内存。如果它是由垃圾收集器管理的话,它会更好。
我试过Marshal.copy,但它没有工作,我恐怕会有一个mem泄漏(我不知道mem是否会自动释放)。任何帮助,将不胜感激。谢谢。
改为传递数组作为参数。没有内存所有权的麻烦和不需要复制。 – 2012-02-20 14:50:43
如果我使用参数传递指向日期的指针,我仍然必须在C#中释放它,对吗?我不知道这将如何解决我的问题? – Tormentor308 2012-02-20 18:12:37
不,托管内存由垃圾回收器负责。 – 2012-02-20 18:16:21