In un progetto C#, ho bisogno di passare i parametri dell'oggetto inserendo riferimenti in una struttura. cioè ho una struttura passata a un dispatcherConversione da vuoto * a oggetto in C#
struct SOMESTRUCT
{
public int lpObject;
}
Dove lpObject contiene un puntatore ad un oggetto personalizzato come
class SomeClass
{
private string foo;
}
E la struttura SOMESTRUCT viene passato da metodo a metodo per raggiungere finalmente il mio codice. Non riesco a modificare il flusso di esecuzione né il sistema SOMSTRUCT strana, così ho intuito l'unica soluzione era quella di gettare il mio oggetto per un puntatore come questo:
var myObject = new SomeClass();
GCHandle GC = GCHandle.Alloc(myObject, GCHandleType.Pinned);
int myRef = GC.AddrOfPinnedObject().ToInt32();
GC.Free();
SOMESTRUCT struct;
struct.lpObject = myRef;
someMethod(struct);
Tuttavia, non riesco a capire come recuperare i membri MyObject dai campi lpObject. Qualcosa del genere:
SomeClass myObject = CastPointerToObject(struct.myRef) as SomeClass;
C'è un modo per farlo o è impossibile? Come posso dire al garbage collector di gestire l'oggetto? Devo creare un nuovo oggetto Garbage-collected e copiare il campo dati per campo?
TYIA,
usa IntPtr invece di int ....quindi funzionerà anche a 64bit –