2009-07-06 12 views
4

Meine Anwendung besteht aus zwei Abschnitten. Eine ausführbare C# -Datei, bei der es sich um die Front-End-UI und eine C++ - DLL handelt, die eher das Low-Level-Zeug ist. Meine Anwendung erstellt und verwaltet viele Instanzen von Objekten, wobei jede C++ - Objektinstanz über eine entsprechende C# -Objekt-Instanz verfügt. Welche Techniken oder Bibliotheken kann ich verwenden, um sicherzustellen, dass Objekte in den C# - und C++ - Abschnitten und Daten in diesen Objekten zur Laufzeit immer synchron sind? Eine Änderung von einem Mitglied in einer Objektinstanz sollte die entsprechende Objektinstanz aktualisieren.Halten Sie C# - und C++ - Klassen zur Laufzeit synchron?

Danke!

Edit: ein wenig geklärt, was ich, indem die Objekte in „sync“ gemeint

+0

Ist das C# Objekt Instanz kapselt die C++ Objektinstanz? Ist es beispielsweise ein Fall, in dem Ihr C# -Objekt einen Zeiger auf das C++ - Objekt enthält? –

+0

Sie sind unabhängig. Sie würden über ein Zwischenobjekt wie über ein Netzwerk kommunizieren. – djcouchycouch

Antwort

1

Es ist nicht ganz klar, ob es das Problem lösen würde, aber haben Sie Managed C++ in Betracht gezogen? Ich hatte einen ziemlich guten Erfolg, indem ich einfach meinen C++ - Code als Managed C++ kompilierte und dann mit den verwalteten Erweiterungen .NET-Klassen erstellte, die die zugrunde liegenden C++ - Daten direkt verwenden. Auf diese Weise gibt es nur eine Kopie der Daten.

Wahrscheinlich nicht für jede Situation geeignet (und ich habe seine Grenzen keineswegs getestet), aber ich fand es ziemlich zeitintensiv. Und da Managed C++ eine korrekte .NET-Sprache ist, war das Ergebnis sauber von der C# -Seite aus zu verwenden, mit keiner der üblichen Kuriositäten oder Eigenarten, mit denen man oft arbeiten muss, wenn man so etwas versucht.

(Ein weiterer ähnlicher Ansatz wäre SWIG zu verwenden (http://www.swig.org/) Wrapper für Sie zu generieren. Ich höre es einfach und funktioniert gut zu bedienen ist, aber ich habe es selbst nicht verwendet.)

+0

Hallo Brone! Danke für die Antwort. Leider liegt das Design nicht in meinen Händen. Ich suche nur nach der besten Lösung unter Berücksichtigung des aktuellen Designs. – djcouchycouch

+0

hatte ich die Wahl, würde ich wahrscheinlich eine Lösung genau so wählen. – djcouchycouch

2

Vielleicht Code Generation würde gut funktionieren. Z.B. Definieren Sie die Eigenschaften/Methoden für diese Klassen an einer Stelle (vielleicht XML oder etwas) und generieren Sie daraus C# - und C++ - Klassen. Vielleicht verwenden Sie so etwas wie CodeSmith (http://www.codesmithtools.com/), um Ihren Code zu generieren.

+0

Wenn Sie das tun, stellen Sie sicher, dass die von Ihnen generierten C# -Klassen "teilweise" sind. Wenn Sie der C# -Klasse einen UI-spezifischen Code hinzufügen müssen, müssen Sie das Objekt nicht erneut generieren, und dies verhindert auch nicht die Neugenerierung des Objekts. – GWLlosa

+0

Hallo Alex! Ich erkannte, dass ich nicht genau angegeben hatte, auf welche Weise diese Objekte synchron bleiben sollten, also habe ich meine Frage aktualisiert. Was ich meinte, war, Instanzen zur Laufzeit synchron zu halten. Vielen Dank! – djcouchycouch

Verwandte Themen