Entwickler-Ecke

C# - Die Sprache - Projektübergreifendes Programmieren


Freefly85 - Mi 04.05.11 16:55
Titel: Projektübergreifendes Programmieren
Hallo

Ich habe zwei C# Projekte.
Wie kann ich vom ersten Projekt das zweite Projekt starten und dann auch noch gleich auf Variablen des zweiten Projektes zugreifen?

Ich habe das zweite Projekt bereits in die selbe Projektmappe importiert. Nun wie weiter? Auf was muss ich achten? Welche Implementationen muss ich vornehmen?

Gruss
Kevin


Th69 - Mi 04.05.11 16:59

Hallo,

um was für Projekte handelt es sich denn (Konsole, WinForms, WPF, Klassenbibliothek)?


Freefly85 - Mi 04.05.11 18:27

Hallo Th69

Es handelt sich (bei beiden Projekten) um WinForms Anwendungen. Dazu sind bei beiden Projekten noch zusätzliche Klassen mit normalen Berechnungsfunktionen, welche in den jeweiligen Hauptklassen (WinForms) instanziert sind als Objekte.

Gruss
Kevin


Th69 - Mi 04.05.11 19:48

Hallo Kevin,

du könntest die eine WinForms-Assembly direkt als Referenz (Verweis) zu der anderen hinzufügen und dort dann ganz normal dessen Klassen (Forms) benutzen und aufrufen.
(Du solltest aber nicht die Main-Methode aufrufen, da du sonst zwei Application.Run()-Aufrufe hättest - ich weiß nicht, ob sich dies so gut vertragen würde).

Und der Datenaustausch kann dann einfach über (public) Eigenschaften bzw. Ereignisse stattfinden.

Was war denn der Hintergrund, daß du zwei getrennte Projekte hast?

Nur noch als Info: wenn du beide WinForm-Anwendungen getrennt (z.B. per Process.Start()) starten würdest, so wäre der Aufwand für den Datenaustausch um ein vielfaches höher. Stichwort: Interprocess-Communication (IPC)


Freefly85 - Do 05.05.11 11:40

Vielen Dank!

Es schein, als hättest Du ziemlich viel Ahnung :-)
Ich werde so bald als möglich das Ganze versuchen umzusetzten.

Der Hintergrund ist folgendes:
Ich habe ein komplettes Projekt bereits programmiert. Nun ist eine Zusatzanforderung dazugekommen.
Für diese Zusatzanforderung habe ich im Internet ein C#-Projekt gefunden (http://channel9.msdn.com/coding4fun/articles/Laser-Tracking-Camera). Nun möchte ich von meinem Projekt die Implementationen des heruntergeladenen Projektes verwenden.


Th69 - Do 05.05.11 12:13

Hallo,

du könntest (da du ja den kompletten Source-Code des "Laser Tracking Camera"-Projektes hast, dieses auch einfach als "Klassenbibliothek" (Class Library) erstellen lassen (einfach in den Projekt-Eigenschaften umstellen). Dann referenzierst du dieses Projekt in deinem eigenen Projekt und es wird dann automatisch die "Laser Tracking Camera"-DLL in dein Ausgabeverzichnis kopiert ("Copy Local" = "true").

P.S: Danke für dein Kompliment - ich tue zumindestens so, als ob ich Ahnung habe ;-)


Freefly85 - Do 05.05.11 16:29

Danke!

Ich habe es nun gleich versucht. Hat wunderbar funktioniert. Jetzt kanns dann weitergehen. ;-)

Gruss
Kevin


Freefly85 - Fr 06.05.11 22:50

Es ist noch eine Frage aufgetaucht...

Ich habe nun das heruntergeladene Projekt in mein Projekt als DLL eingebunden unter "Verweise" (ich arbeite mit VS2010).
In der Klasse verwende ich die Bibliothek:

C#-Quelltext
1:
using motion;                    


Nun wie kann ich nun aus meinem Projekt das Start-GUI mit dem Namen "MainForm.cs" starten?

Ich versuchte es irgendwie so:

C#-Quelltext
1:
motion.MainForm.Start();                    


So als Idee...aber das geht leider nicht. :-( Mir fehlen hier eindeutig noch etwas Syntax-Kenntnisse :-)


Th69 - Sa 07.05.11 09:54

So wie jedes andere Form auch:

C#-Quelltext
1:
2:
3:
4:
5:
MainForm frm = new MainForm();

frm.Show();
// bzw.
frm.ShowDialog();

(nur wenn in deinem Hauptprojekt auch deine Hauptform'MainForm' heißt, dann solltest du die andere Form voll qualifizieren: motion.MainForm)

P.S: Namensbereiche sollten eigentlich mit einem Großbuchstaben beginnen