2010-01-22 8 views
6

Tengo una aplicación escrita en C++ nativo que me gustaría ejecutar en la máquina virtual .NET. Estaba pensando en recompilar el código de C++ como C++/CLI, usando el compilador de Visual Studio 2008. Lamentablemente, no encuentro ninguna documentación sobre cómo hacer esto, entonces mis preguntas:¿Cómo portar el código C++ a C++/CLI en Visual Studio?

  • ¿Esto realmente tiene sentido? ¿Estoy intentando lo imposible?
  • ¿Dónde se puede encontrar información sobre el tema?
+1

Hay muy poco código de C++ que no se puede traducir a IL. Solo sé de __fastcall. Los metadatos son un problema, pero se pasan fácilmente por alto con los archivos de encabezado tradicionales. Simplemente presione el interruptor, el compilador se quejará. –

+0

Lamento responder a una pregunta anterior, pero no reconozco el acrónimo IL, y buscarlo junto con palabras clave relacionadas produce muchos resultados de trabajo en Chicago: \ ¿Qué significa IL? – StockB

+1

IL es más específicamente CIL, para el Lenguaje Intermedio Común. http://en.wikipedia.org/wiki/Common_Intermediate_Language. Si está leyendo documentos de MSDN, busque CLR para Common Language Runtime. (El código CIL se ejecuta en la plataforma CLR, por lo tanto, ambos se están refiriendo a lo que desea). En Visual Studio 2010, la aplicación New Form/C++/CLR/Windows Form (o lo que sea). En VS 2012, consulte http://stackoverflow.com/questions/11130915/windows-form-clr-application-in-visual-studio-2012-rc para saber qué hacer, si necesita Windows Form con su C++. – ToolmakerSteve

Respuesta

7

Una gran cantidad de código C++ nativo simplemente compilará y ejecutará en C++/CLI. Este es realmente un tipo de compilador híbrido que puede llamar a funciones nativas de Win32 y usar librerías C estándar como OpenGL. Incluso puede llamar directamente a las interfaces COM (todas las cosas que puede hacer con un compilador nativo de C++).

La biblioteca .Net también está disponible, pero para estos crea clases administradas (utilizando la palabra clave ref clase). Utilizará gcnew para asignar memoria para estas clases (de un montón recogido de basura). La memoria para sus clases normales todavía se asigna utilizando new y delete (de un montón estándar, no recogido de basura).

En resumen, puede migrar a .Net en partes, aunque todavía existe cierta fricción al cambiar entre clases administradas y no administradas.

Encontré este libro útil: Pro Visual C++/CLI.

5

ir a las características del proyecto -> General -> compatibilidad con Common Language Runtime -> cambiar a/CLR

Se llama ahora CLR. Lea sobre él here y here.

2

En C++ simplemente puede recompilar su base de código con/clr. Esta técnica se llama IJW (It Just Works) para que pueda usar fácilmente sus clases existentes con CLR.

Cuestiones relacionadas