l'interaction entre un projet C# et C++ du projet dans la même solution
J'ai un windows forms application écrite en C++/cli. Je veux prolonger cette app avec des formes nouvelles et j'aimerais créer en C# dans un projet distinct.
Est-il possible d'ajouter simplement un projet C# pour une solution qui a le projet de C++ et les deux vont interagir? Par interaction, je veux dire que, disons, un bouton cliqué sur un formulaire écrit dans le projet c# sera en mesure d'appeler des méthodes dans le projet c++. Demande peut-être d'une manière différente, un objet peut-il dans le projet C# référence à un objet du projet c++? si oui, connaissez-vous un exemple de code pour me faire?
Grâce.
OriginalL'auteur Steve H | 2011-10-20
Vous devez vous connecter pour publier un commentaire.
Oui. C++/CLI application sera en mesure de faire l'interface avec une application C#, dans l'une des deux façons suivantes:
Si vous êtes à l'aide de la CLI extensions (qui, à partir de votre post, il semble que ça), vous serez en mesure d'écrire le code en utilisant les nouvelles références de l'objet:
Objets gérés:
System::String^ myString
(en C++) est le même questring myString
en C#Géré réf:
System::String% myString
est équivalent àref string myString
.Si vous souhaitez utiliser C++ natif types, alors vous devrez utiliser P/Invoke, mais c'est une catégorie tout à fait différente. Pour ce que vous voulez faire, il suffit d'ajouter le projet C++ comme une référence à votre projet C#, écrire un public visible de classe en C++ à l'aide de types gérés, et ensuite compiler. Votre projet doit ensuite être visible de votre classe C# dans quel espace de noms que vous avez choisi pour la classe C++.
EDIT: oh, et si vous avez besoin d'allouer des objets gérés par le C++, vous aurez besoin d'utiliser
gcnew
au lieu denew
.OriginalL'auteur Michael
Cela peut être fait par la compilation d'une dll en C++ du projet, puis d'avoir l'application en C# sur la charge que les dll et ensuite il sera en mesure d'appeler ses fonctions exportées. Cette méthode permet à votre code C++ à du code non managé.
Aussi loin que de trouver un exemple qui est déjà en place, je ne peux que trouver un projet Visual Studio 2008:Microsoft Tout-En-Un Code-Cadre
Pour visual studio 2010, voici comment faire le C++ côté: Comment faire une dll en C++
À l'aide Explicite PInvoke en C++
OriginalL'auteur VoidStar