2009-07-06 7 views
4

Mon application est construite en deux sections. Un exécutable C# qui est l'interface utilisateur frontale et une DLL C++ qui est plus la substance de bas niveau. Mon application crée et gère de nombreuses instances d'objets, où chaque instance d'objet C++ possède une instance d'objet C# correspondante. Quelles techniques ou bibliothèques puis-je utiliser pour garantir que les objets des sections C# et C++ et les données de ces objets sont toujours synchronisés lors de l'exécution? Une modification d'un membre dans une instance d'objet doit mettre à jour l'instance d'objet correspondante.La synchronisation des classes C# et C++ est-elle synchronisée au moment de l'exécution?

Merci!

Edit: clarifier un peu ce que je voulais dire en gardant les objets « synchronisation »

+0

Est-ce que l'objet C# instance encapsule l'instance d'objet C++? Est-ce un cas où, par exemple, votre objet C# contiendrait un pointeur vers l'objet C++? –

+0

Ils sont indépendants. Ils communiqueraient à travers un objet intermédiaire, comme à travers un réseau. – djcouchycouch

Répondre

1

Il n'est pas tout à fait clair si cela résoudrait le problème, mais avez-vous considéré le C++ managé? J'ai eu assez de succès en compilant simplement mon code C++ en tant que Managed C++, puis en utilisant les extensions managées pour créer des classes .NET qui utilisent directement les données C++ sous-jacentes. De cette façon, il n'y a qu'une seule copie des données.

Probablement pas adapté à toutes les situations (et je n'ai pas testé ses limites par tous les moyens) mais je l'ai trouvé tout à fait un gain de temps. Et puisque Managed C++ est un bon langage .NET, le résultat était propre à utiliser du côté C#, avec aucune des bizarreries ou des bizarreries habituelles que l'on doit souvent contourner lorsqu'on essaie ce genre de chose.

(Une autre approche similaire serait d'utiliser SWIG (http://www.swig.org/) pour générer des wrappers pour vous. Je l'entends est facile à utiliser et fonctionne bien, mais je ne l'ai pas utilisé moi-même.)

+0

Bonjour brone! Merci de répondre. Malheureusement, le design est hors de mes mains. Je cherche juste la meilleure solution en tenant compte de la conception actuelle. – djcouchycouch

+0

Cependant, si j'avais le choix, je choisirais probablement une solution exactement comme ça. – djcouchycouch

2

Peut-être la génération de code fonctionnerait bien. Par exemple. définir les propriétés/méthodes pour ces classes dans un endroit (peut-être XML ou quelque chose) et générer des classes C# et C++ à partir de cela. Peut-être utiliser quelque chose comme CodeSmith (http://www.codesmithtools.com/) pour générer votre code.

+0

Lorsque vous faites cela, assurez-vous que les classes C# que vous générez sont «partielles». De cette façon, si vous devez ajouter un code spécifique à l'interface utilisateur à la classe C#, vous n'avez pas besoin de régénérer l'objet, et cela n'empêche pas non plus la régénération de l'objet. – GWLlosa

+0

Salut Alex! Je me suis rendu compte que je ne spécifiais pas exactement de quelle manière ces objets devaient rester synchronisés, alors j'ai mis à jour ma question. Ce que je voulais dire, c'était de garder les instances synchronisées au moment de l'exécution. Merci! – djcouchycouch

Questions connexes