2010-06-12 4 views
2

J'ai écrit un programme en C++ et j'ai remarqué qu'il y a une bibliothèque en C# que quelqu'un d'autre a écrit que je voudrais lier à mon code .... mais je ne suis pas sûr de savoir comment fais ça. Quelqu'un peut-il suggérer quelque chose? Doute, cela compte, mais j'utilise Windows 7 avec MSVC2010.Connexion de C++ à C#

Merci d'avance!

+1

Que fait la bibliothèque? Peut-être qu'il existe une bibliothèque C++ pour cela. – AraK

+0

C'est une bibliothèque de reconnaissance vocale, mais j'aimerais aussi connaître la réponse à cette question pour l'avenir, peu importe si c'est une autre bibliothèque pour cela. – Cenoc

Répondre

5

Si vous êtes familier avec COM que vous pourriez access the .NET library through COM. Si la bibliothèque ne fournit pas d'interopérabilité COM hors de la boîte, vous pouvez écrire un wrapper à l'aide de C# et l'exposer via COM.

Si vous souhaitez extraire une bibliothèque .NET, vous devez savoir qu'elle nécessite un environnement d'exécution .NET qui peut prendre des ressources précieuses. Si vous construisez l'application en C++ pour des raisons de performances, il est peut-être préférable de porter les parties de la bibliothèque dont vous avez besoin en C++.

+0

Exemple de code: http://stackoverflow.com/questions/106033/how-do-i-call-a-net-assembly-from-c-c –

6

Vous pouvez essayer de compiler votre programme C++ en mode C++/CLI. Ensuite, le compilateur produira un exécutable .NET qui pourra créer des objets C# et utiliser leurs méthodes.

C++/CLI est discuté ici: C++/CLI

+1

+1. Notez que si vous le faites, vous devrez marquer votre assembly comme étant dangereux, car le marquage de votre code comme étant sûr ne nécessite aucun code non géré. –

+0

Il semble que cela nécessiterait refactoring du code C#? Est-ce le cas? Aussi, puis-je compiler d'autres programmes tels que Qt avec C++/CLI? – Cenoc

+0

Vous ne devriez pas avoir besoin de changer quelque chose du côté C#, car vous pouvez créer et utiliser des objets .NET en C++/CLI, quelque chose comme: 'DotNetClass^aClass = gcnew DotNetClass(); aClass-> SomeMethod(); ' Vous auriez probablement des problèmes pour convertir des bibliothèques telles que QT en C++/CLI. Cependant, vous pouvez définir des fichiers individuels dans un projet pour compiler en mode C++/CLI et laisser les autres comme C++ normal. Visual Studio gérera la transition pour vous. Cela signifie que vous pouvez créer un wrapper C++/CLI autour de la bibliothèque .NET et conserver le reste du projet en C++ normal. –