Ho un metodo esterno che riceve alcuni parametri, alloca la memoria e restituisce un puntatore.Come bloccare un puntatore "non gestito"?
[DllImport("some.dll", CallingConvention = CvInvoke.CvCallingConvention)]
public static extern IntPtr cvCreateHeader(
Size size,
int a,
int b);
Sono ben consapevole che si tratta di una cattiva pratica di allocare memoria non gestita in un'applicazione gestita, ma in questo caso non ho scelta come la dll è 3rd party.
c'è una funzione equivalente che rilascia la memoria e so qual è la dimensione dell'array allocato.
- Come si collega il puntatore restituito in modo che il GC non lo sposti (senza andare pericoloso)? 'fixed' non lo farà perché questo puntatore è ampiamente utilizzato in tutta la classe?
- Esiste un metodo migliore per questo p/Invoke?
Perché sarebbe un puntatore mossa non gestito (indirizzo cambiamento IOW)? Penso che la tua comprensione sia sbagliata. La correzione è necessaria solo quando si utilizzano oggetti gestiti nel codice non gestito. – leppie
GC si muove oggetti gestiti (puntatori) nella sua ottimizzazione (defrag) operazione. – Gilad
Bene, non stai usando i puntatori gestiti. – leppie