2010-11-26 8 views
10

Je me demande comment appeler une méthode de classe C# à partir du code C++ (Native, not C++ CLI)? Besoin d'une manière simple et éléganteComment appeler C# à partir de C++

+3

Aussi cool que cela puisse être la pensée blesse –

+0

duplication possible de [Appeler le code C# de C++] (http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins

Répondre

9

Transformez votre ensemble C# en un COM visible et utilisez les interfaces COM. C'est la seule façon de faire en sorte que cela fonctionne à côté de l'IPC créé pour autant que je sache. Le problème provient de l'environnement .NET sous lequel l'assembly .NET doit s'exécuter et C++ s'exécute sous son environnement C++ natif. La seule façon de communiquer est soit un mécanisme IPC (sockets, ...), soit COM, car les processus doivent être "découplés".

Voici un tutoriel pour la solution COM:

+2

Selon à Sasha il y a 2 autres façons en fait. – gideon

+1

Oui, il n'y a aucune exigence pour le "découplage" suggéré. L'environnement ".Net" est fondamentalement mscoree.dll, et il peut charger dans les processus natifs. – MSalters

9

Sasha Goldshtein est l'homme pour ce genre de choses:

Il y a encore plusieurs façons de le faire: 1. Inverser P/Invoke (doit commencer à partir du délégué .NET passé en tant que rappel, donc c'est seulement bon si l'action commence dans votre code .NET); 2. COM interop (chaque classe .NET peut aussi être un objet COM, avec ou sans interfaces explicites); 3. Classes wrapper C++/CLI.

Voir http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

Voir aussi:
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx

10

Vous pouvez intégrer tout ensemble CLR (C#, VB.NET, F #, ...) dans un programme C++ natif en utilisant ce qu'on appelle "CLR Hosting ". C'est ainsi que les programmes natifs (tels que SQL Server) prennent en charge les extensions de code .NET. Par exemple. SQL CLR dans SQL Server.

Vous chargez le CLR dans un processus natif à l'aide CorBindToRuntimeEx() pour .NET 2.0 et .NET 4. CLRCreateInstance() dans

détails peuvent être trouvés sur MSDN, ou le livre de Jeff Richter CLR via C#.

+0

+1 cool! Je ne savais pas à ce sujet! – gideon

-1

La méthode la plus simple consiste à utiliser C++/CLI. Si vous ne pouvez pas l'utiliser dans votre code, écrivez un wrapper dll et appelez cette DLL.

+1

la direction est erronée – user496949

Questions connexes