2011-10-20 13 views
10

Tengo una aplicación de formularios de Windows escrita en C++/cli. Quiero extender esta aplicación con algunos formularios nuevos y me gustaría crearlos en C# en un proyecto separado.interactuando entre un proyecto de C# y un proyecto de C++ en la misma solución

¿Es posible simplemente agregar un proyecto C# a una solución que tenga el proyecto C++ y los dos interactúen? Por interacción, quiero decir que, por ejemplo, un botón al que se hace clic en un formulario escrito en el proyecto C# podrá invocar métodos en el proyecto C++. Cuando se le pregunta quizás de una manera diferente, ¿puede un objeto en el proyecto C# hacer referencia a un objeto en el proyecto C++? Si es así, ¿conoce un código de ejemplo para comenzar?

Gracias.

Respuesta

5

Sí. Una aplicación C++/CLI podrá interactuar con una aplicación C#, de una de estas dos maneras:

Si está utilizando extensiones CLI (que a partir de su publicación parece que suena), podrá escribir código usando las nuevas referencias a objetos:

objetos gestionados: System::String^ myString (en C++) es el mismo que string myString en C# refs gestionados: System::String% myString es equivalente a ref string myString.

Si desea utilizar tipos nativos de C++, tendrá que usar P/Invoke, pero esa es una categoría completamente diferente. Para lo que quiere hacer, simplemente agregue el proyecto de C++ como referencia a su proyecto de C#, escriba una clase públicamente visible en C++ usando tipos administrados, y luego compile. Su proyecto debería ser visible para su clase C# en cualquier espacio de nombre que elija para la clase C++.

EDITAR: oh, y si necesita asignar objetos gestionados a través de C++, necesitará usar gcnew en lugar de new.

1

Esto se puede hacer mediante la compilación de un dll con el proyecto C++, y luego tener la aplicación C# cargar ese dll y luego podrá llamar a sus funciones exportadas. Este método permite que su código C++ sea un código no administrado.

En cuanto a la búsqueda de una muestra que ya está configurado, sólo puedo encontrar un Visual Studio 2008 Proyecto: Microsoft All-In-One Code Framework

Para Visual Studio 2010, aquí está cómo hacerlo lado de C++: How to make a dll with C++ Using Explicit PInvoke in C++

Cuestiones relacionadas