No estoy seguro si cabe, pero quizás "Invertir PInvoke" es una opción.
Si puede llamar primero desde su C# a su C++, entonces puede proporcionar un delegado .NET al C++, donde se puede utilizar como un puntero a la función. A continuación, puede llamar desde su C++ a C# utilizando ese puntero a la función.
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);
Puede haber algunos trucos con la GC recoger el delegado temprano, cualquiera que sea la clase tiene puede necesitar ser fijado al delegado si no sólo se utiliza inmediatamente en RegisterRead
Usted puede envolver que DLL administrada en una ejecutable que es una aplicación de consola y toma argumentos de línea de comando, mientras escupe su resultado al 'stdout'. Luego puede llamarlo como lo haría con cualquier otro exe. No es ideal, pero podría funcionar. Espero que no estés usando varios hilos, porque no sé si esto funcionará entonces. –
Usted mismo dio la respuesta. Escriba un proxy en C++/CLI (o C++. Net o C++ administrado o cómo se llama hoy), luego llame a este proxy desde su código C++ no administrado. – Patrick
tal vez esto ayude: http://stackoverflow.com/questions/1058897/can-c-cli-be-used-to-call-net-code-from-native-c-applications – smerlin