我有一個外部方法,它接收一些參數,分配內存並返回一個指針。如何固定'非託管'指針?
[DllImport("some.dll", CallingConvention = CvInvoke.CvCallingConvention)]
public static extern IntPtr cvCreateHeader(
Size size,
int a,
int b);
我很清楚,這是不好的做法,在管理應用程序分配非託管內存,但是在這種情況下,我別無選擇,因爲DLL是第三方。
有一個釋放內存的等價函數,我知道分配數組的大小是多少。
- 如何固定返回的指針,使GC不移動它(不會不安全)? '固定'不會這樣做,因爲這個指針在整個班級中被廣泛使用?
- 這個p/Invoke有更好的方法嗎?
爲什麼非託管指針會移動(低位更改地址)?我認爲你的理解是錯誤的。只有在非託管代碼中使用託管對象時才需要修復。 – leppie
GC在優化(碎片整理)操作中移動託管對象(指針)。 – Gilad
那麼你沒有使用託管指針。 – leppie