Я звоню метод из C# как это:Преобразовать IntPtr в ULong массив
[DllImport(@"pHash.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr ph_dct_videohash(string file, ref int length);
А вот метод, который я звоню из библиотеки
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;
}
Как я могу читать ulong
массив от IntPtr
?
Я думаю, что если объявить тип возвращаемого импорта, как 'ULong []' компилятора и/или время выполнения сделает для вас грязную работу. – phoog
Это утечка памяти, * кто-то * должен вызвать free(), чтобы освободить память еще раз. Вы не можете выполнить этот вызов, поэтому вы не можете выполнить эту функцию. Он плохо разработан, он должен был предоставить возможность для вызывающего абонента передать буфер. Тогда это легко * и * эффективно. –
Я попытался сделать это и получил ошибку –