Domanda

Sto lavorando ad avvolgere un gran numero di .he .lib file da C ++ nativo di Managed C ++ per l'uso eventuale come riferimento DLL in C #.

Alcuni dei nativo C ++ funzioni hanno un tipo di ritorno di void *. Non sono sicuro di come gestire questo quando passo indietro il valore al mio codice chiamante. Per esempio: se un C # app chiama il mio wrapper DLL, cosa posso restituire dalla chiamata nativa:

void* start(ThreadFunc,void *, unsigned *);

Al momento sto cercando di box il ritorno in un sistema generico :: Object ^ senza fortuna. Questa è la chiamata nella confezione:

m_NativeThread->start(cb, 
        GCHandle::ToIntPtr(GCHandle::Alloc(o)).ToPointer(),
        static_cast<unsigned int*>(GCHandle::ToIntPtr(GCHandle::Alloc(u)).ToPointer())));

Chiunque può offrire una soluzione?

È stato utile?

Soluzione

Puoi farlo un IntPtr? Cosa si aspetta il cliente a che fare con il vuoto *?

Altri suggerimenti

Se il codice gestito ha bisogno di vedere i dati nel vuoto *:

  

Non puoi lanciare un void * a non gestito   memoria ad un riferimento oggetto gestito.   Per trasformare questo in memoria gestita,   dovreste usare Marshal.Copy () o   Marshal.PtrToStructure (). Quella volontà di   Naturalmente funziona solo se si conosce il tipo   dei dati che il void * indica.    fonte

Se il codice gestito non ha bisogno di vedere i dati nel vuoto *:

  

Conservarla in un IntPtr se il vostro   codice gestito non ha bisogno di vedere che cosa   è e solo lo passa di nuovo nel   codice non gestito in seguito.    fonte

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top