Я вызываю метод из C # примерно так:
[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;}
Вопрос в том, как мне получить 64-битный массив без знака в C # и освободить память после его использования. Было бы еще лучше, если бы им управлял сборщик мусора для меня.
Я попробовал Marshal.copy, но это не сработало, и я боюсь, что будет утечка памяти (я не знаю, будет ли память освобождена автоматически или нет). Любая помощь будет оценена. Благодарю.