2009-08-22 7 views

Répondre

3

La meilleure solution pour partager un objet C# entre code natif et managé consiste à utiliser COM interop. Cela vous permet de partager essentiellement une interface d'un objet entre le code managé et sa signature équivalente en C++.

En ce qui concerne la complexité des choses. La majorité des scénarios d'interopérabilité COM sont simples et ne sont pas plus complexes que la bonne vieille programmation COM. Sur le plan géré, il ne ressemble vraiment pas à une interface normale. Une fois que vous introduisez plusieurs threads ou commencez à jouer entre les appartements COM, les choses peuvent être un peu compliquées. D'après mon expérience, la façon la plus simple d'obtenir ce résultat est la suivante.

  • Définir une interface en C# que vous souhaitez utiliser dans
  • C++ Mark l'interface avec le ComVisible (true) attrbute
  • Run tlbexp sur l'ensemble qui génère un fichier TLB
  • Importer le TLB dans votre projet natif

Cela donnera la définition de l'interface dans vos deux projets. Comment passer cela entre les projets nécessite un peu plus de détails dans votre architecture.

0

Une autre solution que je peux recommander, par expérience personnelle, est d'utiliser une interface C++ managée entre les deux si le code C++ auquel vous voulez accéder est trop grand ou trop complexe. Par exemple, j'utilise la bibliothèque réseau RakNet C++ dans un projet C#. Les solutions consistent à créer une classe wrapper massive en C# pour accéder aux fonctions C++ requises, créer une enveloppe C++ autour de ces fonctions qui peuvent être utilisées comme interopérabilité COM ou utiliser C++ managé (Visual C++/CLI).

J'ai choisi ce dernier qui me permet d'utiliser C++ pour accéder à la bibliothèque RakNet, mais les classes créées peuvent être utilisées directement dans un autre projet .NET comme si. La logique principale a donc été créée dans ces classes managées en C++, ce qui me permet également d'utiliser le framework .NET et certaines de ses merveilleuses fonctionnalités. Dans mon projet C# j'ai simplement besoin d'appeler la bibliothèque Managed C++ qui me fournit toutes les 20 fonctions dont j'ai besoin pour tout faire.

Questions connexes