Pregunta

Tenemos nativa Win32 código C ++ y un conjunto de C # asambleas que deseamos llamar desde el código C ++. Me resúmenes nuestros optios como:

  1. Uso COM. tendría que ser decorado con atributos adicionales (GUID, ComVisible) El código C #. necesitaría el C # asambleas que se regasm registrado y estarían disponibles para el C ++ nativo código a través de COM.

  2. Utilice un C ++ / CLI (anteriormente manejado C ++) clase contenedora. Una clase de C ++ se podría añadir al proyecto nativo C ++. Esa clase se compila con / clr. El código nativo C ++ sería llamar a la clase ++ / CLI C que luego llamar al código .Net. Sin COM involucrado. El CLR se inicia por la magia como sea necesario con el de clasificación manejado por los extenstions C ++ / CLI.

  3. Anfitrión una instancia del CLR en el código nativo C ++.

Voy a descartar la opción 3, ya que no veo las ventajas sobre la opción 2 que no sea perdemos la necesidad de una clase contenedora. Entonces la pregunta es, ¿cuáles son las ventajas / desventajas de la opción 1 frente a la opción 2?

Gracias de antemano.

¿Fue útil?

Solución

La opción 2 se realice la mejor, y ser el más transparente y fácil de mantener, la OMI.

No hay realmente ninguna ventaja a la opción 1 que he encontrado. Usando C ++ / CLI parece funcionar mucho mejor, trabajar más rápido y ser mucho más simple en general.

También puede, por cierto, sólo tiene que utilizar el conjunto C # directamente sin tener una clase contenedora. Esto requiere la compilación de todos los archivos que quieran utilizarlo con / CLR, pero funciona bastante bien.

Otros consejos

Para la opción 1 a su favor principal sería no tener que escribir una clase contenedora que puede conseguir peluda en función de su proyecto.

Para la opción 2 no tendrá que modificar su biblioteca administrada para facilitar el uso no administrado, que a veces no es una opción.

Para mí todo se reduce a la que desea realizar los cambios de código.

Con la opción 2 también tienen una forma bastante sencilla de convertir posteriormente toda su aplicación a C ++ / CLI para evitar las transiciones administradas / no manejadas que se llega. Las transiciones pueden ser un problema dependiendo de cómo se use sus ensamblados de referencia es decir, que consiguen un impacto en el rendimiento.

Hasta ahora sólo he tenido experiencias positivas con C ++ / CLI y recomiendo ir por ese camino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top