Estoy realmente en la necesidad de obtener una comprensión más profunda de cómo configurar las cosas correctamente para obtener una interacción elegante entre mis bases de código C++ y C#. Lo que quiero lograr es un editor en el juego escrito en C# para mi motor de juegos (C++/DX). Para hacerlo, dejé que VS creara mi motor como un dll C++ con algunas funciones adicionales (código no administrado) para acceder a la funcionalidad requerida de mi motor desde la base de código del editor C#. Hasta aquí todo bien.¿Cómo manejar la interacción del proyecto C# - C++ de la manera correcta?
Lo primero que me molesta es que tengo que construir el dll con soporte CLR. De lo contrario, C# no acepta el dll por algún motivo. Ni siquiera me permite agregarlo a los recursos ("No se pudo agregar una referencia a 'C: \ Users ... \ frame_work \ Test \ frame_workd.dll'. Asegúrese de que el archivo esté accesible, y que es un ensamblado válido o un componente COM ").
Y cuando construyo el dll con soporte CLR y lo agrego a las referencias en C#, reconstruyo sin soporte CLR, inicio mi editor y realizo una llamada de función desde el dll luego obtengo una excepción HRESULT: 0x8007007E. Lo busqué, pero lo único que encontré tenía que ver con las dependencias, pero eso no se ajusta a la alerta que recibo cuando agrego el dll a los recursos.
El otro punto es que siempre tengo que cambiar el tipo de configuración entre la aplicación (.exe) y dll. en VS C++ dependiendo de si quiero ejecutar mi motor directamente o desde el editor y cada vez que el proyecto completo es completamente nuevo.
Entonces, ¿podría alguien explicarme cómo organizar esto de la manera correcta? ¿Y cuál podría ser una posible razón por la cual C# quiere que el dll sea compilado con soporte CLR?
Gracias chicos/chicas.
Todo funciona bien ahora. El único error fue el hecho de que agregué el dll a las referencias, es decir, el lugar equivocado. Ahora funciona sin el soporte de CLR. Gracias por su respuesta. @Spence – user1042568
Tener la capacidad de forzar la administración de su API no siempre es una opción. – Spence