Non sono sicuro che si adatti, ma forse "Reverse PInvoke" è un'opzione.
Se è possibile chiamare prima dal C# al proprio C++, è possibile fornire un delegato .net al C++ in cui è possibile utilizzarlo come puntatore a funzione. Puoi quindi chiamare dal tuo C++ a C# usando quel puntatore di funzione.
public delegate int Read(int target);
[DllImport("yourC++.dll")]
static extern void RegisterRead(Read x);
Read m_Read = new Read(yourClass.Read);
RegisterRead(m_Read);
Ci possono essere alcuni trucchi con il GC raccogliendo il delegato presto, qualsiasi classe ha il delegato può essere necessario appuntato se non viene solo utilizzato immediatamente in RegisterRead
fonte
2010-06-16 16:09:41
Puoi avvolgere che DLL gestita in un eseguibile che è un'app console e accetta argomenti da riga di comando, mentre sputa il suo risultato su 'stdout'. Puoi quindi chiamarlo come faresti con qualsiasi altro exe. Non ideale, ma potrebbe funzionare. Spero che non stiate usando più thread, perché non so se funzionerà allora. –
Hai dato la risposta da solo. Scrivi un proxy in C++/CLI (o C++. C++ netto o gestito o come viene chiamato oggi), quindi chiama questo proxy dal tuo codice C++ non gestito. – Patrick
forse questo aiuta: http://stackoverflow.com/questions/1058897/can-c-cli-be-used-to-call-net-code-from-native-c-applications – smerlin