2009-12-22 8 views
3

J'ai un ensemble de définitions de structure qui sont utilisées par les composants gérés C# et les composants C/C++ non gérés. À l'heure actuelle, les définitions de structure identiques existent séparément dans les codes C/C++ et C#, ce qui entraîne la duplication et le chaos associé. Quelle est la meilleure façon de gérer des définitions uniques qui peuvent être utilisées à la fois en C# et en C/C++? Merci! AmitDéfinitions communes partagées à travers C/C++ (non géré) et le code C# géré

P.S .: Je suis un gars C/C++ donc s'il y a une façon évidente de le faire, je pourrais le manquer complètement!

Répondre

1

vous avez besoin d'un IDL (Interface Definition langue) essayez googler:

  1. tampons de protocole.
  2. ICE (moteur de communication Internet).
  3. Peut-être Microsoft COM?.
  4. --edit: nouvelle entrée - il semble que Microsoft a un IDL compiler.

Tout dépend de ce que vous voulez. Toutes les technologies ci-dessus ont un élément IDL pour eux, et viennent avec leur propre ensemble de bagages. Personnellement, je resterais bas niveau C/C++: D. Donc je voudrais Google "Imatix GSL" et utiliser la technologie mentionnée pour modéliser le problème en XML et générer les structures de données dans n'importe quel langage de programmation - cette technologie est très simple et subtile et nécessite un programmeur d'expérience, donc si elle doesn ' Il est logique que vous vous en teniez à un IDL.

- modifier: technique de programmation -

Vous pouvez résoudre le problème par la technique pure si vous le souhaitez. Le chaos s'ensuit lorsque la rigueur de l'ingénierie s'effondre. Si vous prenez la décision de pare-feu et que vous encapsulez le problème dans du code C/C++ pur, vous n'aurez plus à vous soucier de l'interface qui tombe dans votre code dépendant - car tout langage utile peut s'interfacer avec le ABI de votre plateforme (fonctions C simples: P). Le point crucial n'est pas d'exposer les internes, mais seulement une interface avec des types opaques, tels que des poignées numériques qui représentent des objets et des fonctions qui peuvent être effectuées sur vos types.

3

Je ne connais pas votre ou vos projets, mais avez-vous envisagé de créer un pont géré pour votre bibliothèque au C++/CLI? Avec le "It Just Works" le hachage du compilateur C++/CLI fait pour vous, plusieurs fois vous serez en mesure de rassembler et de partager des types gérés avec du code natif et aller-retour. Encore une fois, je ne sais pas si c'est bon pour vous sans plus de détails, mais il pourrait être intéressant de regarder dans.

1

Une fois, j'ai voulu le faire dans un de mes projets qui avait une séparation entre le code C# et le code C.Idéalement, le code C# aurait emprunté les fichiers d'en-tête du code C mais:

  • depuis C# ne supporte pas les inclure, je ne vois pas comment vous pourriez partager la définition d'une structure et de l'inclure à la fois dans votre C# ou C/C++ Code
  • ayant mes définitions de structure en-têtes séparées ne convenait pas de toute façon
  • Je ne voulais pas compter sur IDL ou sur mesure « analyser les en-têtes C et structures d'extraire uniquement les définitions » pré-traitement
Questions connexes