我打電話從C#這樣的方法:轉換的IntPtr到ULONG陣列
[DllImport(@"pHash.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr ph_dct_videohash(string file, ref int length);
這裏是我如何可以讀取ulong
陣列的方法,我從圖書館
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;
}
調用來自IntPtr
?
我認爲,如果你申報進口的返回類型爲'ULONG []'編譯器和/或者運行時會爲你做骯髒的工作。 – phoog
這是一個內存泄漏,*有人*必須調用free()來再次釋放內存。您無法撥打該電話,因此您無法激活此功能。它的設計不好,它應該爲調用者提供通過緩衝區的選項。然後它很容易*和*高效。 –
我試圖做到這一點,並得到錯誤 –