假設在Native.dll中有一個C++方法int NativeMethod(double, double *)
。我在調用從託管代碼這種方法第一次嘗試(假設我不需要指定入口點)正確使用DllImport
[DllImport("Native.dll")]
private static extern int NativeMethod(double inD, IntPtr outD);
然後使用DLL我做
IntPtr x = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
NativeMethod(2.0, x);
//do stuff with x
Marshal.FreeHGlobal(x); //crash
我想明白爲什麼這裏崩潰了。我的第一個猜測是,這是一個堆問題,因爲DLL和我的應用程序可能使用不同的CRT。但是,如果是這種情況,爲什麼不調用NativeMethod崩潰呢?該方法返回一個x,我可以成功地從中提取double。
我能夠獲得進口通過將雙參照
[DllImport("Native.dll")]
private static extern int NativeMethod(double inD, IntPtr outD);
工作爲什麼在第一次嘗試FreeHGlobal崩潰,以及什麼纔是指針傳遞給本地方法的推薦方式? out關鍵字可以正常工作,但如果我需要編組字符串呢?我不認爲我能得到周圍AllocH和弗裏...
它給你什麼錯誤信息? – Amy 2010-07-13 14:54:02
當然,這應該是typeof(雙)。但我認爲SizeOf(typeof(InpPtr))總是> = SizeOf(typeof(double)),所以它可能以某種方式工作。有趣的是,什麼是「用x做東西」的一部分? – 2010-07-13 15:00:02