2008-10-08 9 views

Respuesta

22

No tenemos un compilador para C++/CLI, sería una empresa muy grande para una base de usuarios muy pequeña. Considere también que la especificación C++/CLI es inherentemente defectuosa y no portátil, por lo que poder compilarla no ayudaría mucho en el caso general.

Se puede compilar con el compilador MS .NET y ejecutar en mono con estas restricciones:

  1. carrera con mono en cualquier sistema si la aplicación C++/CLI es administrado puro (pero entonces, ¿por qué utilizar tales un lenguaje feo y no C#?

  2. ejecutar con mono en Windows en los otros casos (las aplicaciones C++/CLI son en general no portátiles e incluyen código nativo, por lo que pueden ejecutarse solo en Windows y no son interesantes para el objetivo principal de mono que es ejecutar programas administrados en Linux)

Tenga en cuenta que la propia MS caerá eventualmente C++/CLI, por lo tanto, no invierta demasiado en ella y cambie a C#.

+20

"La propia MS caerá eventualmente C++/CLI" ¿Podría explicar por qué piensa eso? Me parece muy poco probable. –

+8

Managed C++ ya no está soportado y descontinuado, no tardó mucho en hacerlo. Ahora ve a contar las noticias relacionadas con C++/CLI en el último año o dos, las publicaciones del blog y los anuncios. Conecta los puntos. – lupus

+0

Cuente las noticias, publicaciones en el blog, anuncios relacionados con C++ (provenientes de Microsoft) y compárelos con C#, ASP.NET, etc. ¿Eso significa que MS eliminará C++? –

0

vaya here y busque en "Idiomas perdidos". Pero solo porque no puedes compilar no significa que no puedas ejecutar . Puede compilar su código C++ utilizando el framework sdk e intentar ejecutarlo usando mono. Vale la pena intentar de todos modos.

9

Mono es capaz de ejecutar ensamblajes "puros" generados por C++/CLI, es decir. los que no contienen cualquier código nativo. Las diversas opciones/clr admitidas por el compilador C++ están documentadas en MSDN.

Actualmente no hay soporte para compilar C++/CLI. Se ha trabajado en la modificación de GCC para emitir IL, pero no está completo (y no aparece activo). Vea esto article.

No creo que Microsoft documente el formato para incluir código nativo en un ensamblado, por lo que es difícil admitir esto.

1

No, C++/CLI es not supported en Mono y probablemente nunca lo será, aunque generar IL puro utilizando compiladores de MS permitiría que el código totalmente administrado se ejecute en Mono.

Como lenguaje de interoperabilidad, C++/CLI existe para que sea posible llamar al código no administrado. La otra alternativa es usar P/Invoke que es well-documented aunque con problemas.

+2

¿En qué tipo de problemas está pensando? – Stringer

2

En Mono 2.4 puede ejecutar aplicaciones C++/CLI que se compilaron en, por ejemplo, Visual Studio 2008 con/clr: cambio seguro.

17

Mono recientemente ha hecho algunos avances bastante grandes con la interoperabilidad de C++ en CXXI.

From this posting, el cuento es que la nueva tecnología permite CXXI ​​C#/NET: a.

  • consumir fácilmente las clases existentes de C++ C# o cualquier otro.NET lenguaje
  • Instantiate C++ objetos de C#
  • Invoke C métodos ++ en clases de C++ de código C#
  • métodos en línea
  • invocación de C++ de código C# (siempre que su biblioteca se compila con -fkeep-inline-funciones o que proporcione un sustituto biblioteca)
  • la subclase C++ clases de C#
  • métodos
  • Override C++ con métodos de C#
  • exposicion casos de ++ clases C o clases # C++/C mixtos tanto a # código C y C++ como si fueran código nativo.

CXXI ​​es el resultado de dos veranos de trabajo de Summer of Code de Google para mejorar la interoperabilidad de Mono con el lenguaje C++.

+6

¿Cuál es el estado actual de este proyecto? ¿Está en un estado utilizable? No ha habido ninguna actividad en el repositorio en aproximadamente un año y el grupo de discusión es bastante simple. –

+0

Sería interesante si hay algún plan para apoyar esto en el futuro. –

+0

Parece estar muerto. – John

7

Esta es una pregunta muy antigua con respuestas muy interesantes después de algunos años.
A partir de ahora tritao/CppSharp es el tenedor más activamente desarrollado de mono/cxxi que fue trasladado de nuevo al repositorio mono en 2013 y está siendo desarrollado activamente desde, El árbol actual se puede encontrar en mono/CppSharp

Su readme es here y la características para el 'generador' son:

  • múltiples backends: C++/CLI y C# P/Invoke
  • múltiples ABIs: Itanium, MS, ARM, iOS y iOS64
  • Múltiples plataformas: Windows, OS X y Linux anulando el apoyo
  • mesa virtual
  • soporta herencia múltiple
  • semántica fácilmente extensible a través de usuario pasa
  • apoyar el trabajo en curso para STL (sólo C++/CLI)
  • API de personalización de tipo fuerte y mapas de tipo

también viene con un montón de cosas AST fresco y un analizador.