È un po 'strano fare questa domanda, perché ho un codice che sembra non dovrebbe funzionare, ma lo fa, e anche se non mi lamento, mi piacerebbe confermare perché? LOLIn che modo i callback non statici funzionano dal codice nativo?
Semplicemente, ho una DLL nativa C++ (nessun CLR/supporto gestito a tutti) che richiede una richiamata dal codice C#. Il lato nativo memorizza una funzione di callback stdcall, fornita dal lato C#. Ho sempre pensato che il callback METHOD (in C#) doveva essere statico, ma non statico e l'espressione lambda ENTRAMBI funziona JUST FINE !? Come viene eseguito il marshalling del "questo" puntatore dal codice nativo? Ho sempre pensato che il codice nativo memorizza solo i puntatori di funzione non istanza?
Ora ho trovato un articolo in cui un tizio ha emesso il codice IL per "collegare" tra callback gestiti nativi e non statici. Ho anche notato questo metodo deprezzato: "Marshal.GetUnmanagedThunkForManagedMethodPtr()". Il metodo non è più supportato, cosa che presumo significhi che sia integrato?
sintesi Domanda:
È thunking ora integrato nativamente nel .NET attraverso l'emissione di codice IL? In tal caso, in quale versione di .NET è stato supportato in modo nativo?
Il "thunking" implicito è supportato anche in Mono?
Quando l'IL viene emesso per le richiamate gestite, cosa succede quando l'istanza a cui si riferisce il thunk viene cancellata? L'IL viene rimosso, oppure potrebbe portare a una "perdita" di memoria per così dire?
Grazie.
Grazie. È un peccato, come al solito, questa roba è così astratta senza alcuna documentazione adeguata. :/Appena sotto la pelle, ma comunque ...;) Sto imparando molto di più sul marshalling da quando ho avviato un wrapper gestito V8 per il mio take su un server basato su JavaScript: https: //dreamspace.codeplex. com / –