Estoy realmente confundido por la multitud de información errónea sobre la interoperabilidad nativa/administrada.Llamar a una devolución de llamada nativa desde el código .NET administrado (al cargar el código administrado usando COM)
Tengo un C++ exe normal que NO está construido con CLR (no es administrado por C++ ni por C++/CLI y nunca lo será). Este C++ exe está "a cargo", no hay un contenedor administrado para él.
Me gustaría acceder a algún código que tengo en un ensamblado C# de mi C++ exe. Puedo acceder al ensamblado C# desde mi código C++ usando COM. Sin embargo, cuando mi código C# detecta un evento, me gustaría llamar a mi código C++. El puntero de la función C++ para devolver la llamada se proporcionará en tiempo de ejecución. Tenga en cuenta que el puntero de la función C++ se corresponde con una función que se encuentra en el entorno de ejecución del exe. Puede usar miembros estáticos desde allí. No quiero que el código administrado intente cargar una DLL para llamar a una función (no hay una DLL).
¿Cómo paso este puntero de función C++ a mi código C# a través de COM/.NET y hago que mi código C# lo llame con éxito?
Gracias!
En el paso 2, ¿el puntero de función llegará inicialmente en C# -y como IntPtr? – evilfred
Para obtener el puntero de C/C++ a C#, se calculará. Sí, los punteros C/C++ se representan como C# 'IntPtr' cuyo tamaño es específico de la plataforma. –
Probablemente estoy haciendo algo tonto. El compilador de C++ se queja de que no puede convertir mi parámetro de voic (__ cdecl *) (UINT) a long (el método toma un IntPtr en C#). Además, el ejemplo de Zhang implica un puntero de función de C++ recuperado en C# no recuperado de C++ ... – evilfred