Sono in corso la valutazione delle possibilità di implementare un'infrastruttura di plugin per un'applicazione nativa che consente di scrivere estensioni nel codice gestito. I plug-in funzioneranno su grandi buffer in virgola mobile (-ish) allocati nell'heap nativo che sono abbastanza costosi in termini di impronta di memoria da copiare. Di conseguenza un plugin dovrebbe essere in grado di operare direttamente sulla memoria nativa.Accesso alla memoria nativa in modo trasparente dall'assembly .NET
Per quanto ne so, è possibile accedere alla memoria nativa dal codice gestito utilizzando Unsafe Code and Pointers (a mio avviso questa è l'unica disposizione nel framework .NET per farlo). Per semplificare lo sviluppo di plugin, preferisco non esporre questo artefatto e fornire invece un meccanismo di proxy in modo da poter accedere ai buffer come raccolte gestite.
Non ci sono restrizioni all'implementazione (un livello di interoperabilità C++/CLI va bene, ad esempio) o una specifica versione di runtime .NET. I buffer possono essere anche di dimensioni fisse; il plugin modificherà solo i contenuti.
È possibile implementare un'infrastruttura che soddisfi i requisiti di cui sopra e, in caso affermativo, quali opzioni esistono?
Scrivere una classe gestita che fornisca un'interfaccia adatta alla manipolazione di detto buffer? Detto classe userebbe puntatori e cose nelle sue viscere, ma esponeva solo bit gestiti in sicurezza. –
è possibile fornire COM visibile e creare oggetti COM che si occupano del codice non gestito –