C++ [Visual Studio] Projektübergreifend in ein Exe-Projekt Linken möglich?

F_GXdx

Captain
Registriert
März 2006
Beiträge
4.028
Hi Leute,

Folgende Situation: Ich habe eine Visual Studio Solution mit einigen Projekten. Eines davon ist das Startup Exe Projekt. Dieses beinhaltet jetzt aber eine Klasse, die ich in einem anderen Projekt auch brauche (das in eine DLL baut).

Normalerweiße ist der Workflow ja so, dass man dem Compiler den include-folder der Headerfile und Sourcefile mitteilt und dem Linker wo die DLL ist.

So, ich habe ja aber keine DLL, weil in eine EXE gebaut wird.

Wie würdet ihr das jetzt machen? Die Klasse rüberkopieren ist keine akzeptable Lösung, da sich die Klasse noch laufend ändern wird.

Ich warte einfach mal auf eure Vorschläge, und sag schonmal "danke" :D
 
Zuletzt bearbeitet:
Du kannst doch wie bei C# die Exe in dem Projekt verlinken und danach müsste dir alles aus der EXE zur Verfügung stehen
 
Du kannst die Klasse in ein eigenes Projekt packen und darauf referenzieren.

Oder Du verschiebst sie in das Projekt in welchem Du sie jetzt brauchst und referensiert vom Projekt mit der Anwendung drauf.

Je nachdem, wo sie hingehört ;)

Viele Grüße
Winni
 
SymA schrieb:
Du kannst doch wie bei C# die Exe in dem Projekt verlinken und danach müsste dir alles aus der EXE zur Verfügung stehen

Ich bekomme da immer:
Error 1 error LNK1107: invalid or corrupt file: cannot read at 0x308 D:\*zensiert*\stupid_linker_test\Stupid_Test\x64\Debug\Stupid_EXE_project2.exe 1

Daher dachte ich, das geht vielleicht gar nicht.

WinKill schrieb:
Du kannst die Klasse in ein eigenes Projekt packen und darauf referenzieren.

Stimmt, wahrscheinlich werde ich es dann wirklich so machen.
 
Du kannst auch eine Klasse in ein anderes Projekt "als Link" einfügen. Dann hast du die Klasse in dem Projekt und wenn du Änderungen machst aktualisieren sich alle Verlinkungen automatisch.
Eine Library ist wohl am saubersten, lohnt sich aber halt für eine Klasse kaum.
 
Du willst eine Klasse in 2 Projekten nutzen? Richtig verstanden?

Dann kannst du im zweiten Projekt die Dateien hinzufügen und gibst diesen Pfad zu dem anderen Projekt als zusätzlichen Includepfad an.
 
Sch.... SymA hatte Recht, ich habe dem Linker versehentlich die DLL gefüttert und nicht die LIB, mit Letzterer haut es natürlich schon hin. Sorry, mein Fehler!!

Da sich allerdings jetzt zirkuläre Dependencies aufbauen, werde ich vermutlich trotzdem ein eigenes Projekt für die betreffenden Klassen anlegen.

Danke
 
ALT + F7 (Um ins Projekteigenschaftsfenster zu kommen)

Konfigurationseinstellungen --> C/C++ --> Allgemein --> "Zusätzliche Includeverzeichnisse"
 
Wie schon geschrieben, es ging nicht ums includen, sondern ums linken.
Würde man nur includen, könnte der linker das nicht auflösen.
 
Ich verstehe das Problem nicht ganz...

Der Linker kann es nicht auflösen, wenn du nur den Header der Klasse includest (weil ja die Implementierung der einzelnen Methoden fehlt und damit die Sprungmarke). Das stimmt. Fügst du aber die cpp deinem Projekt hinzu, gibt es doch keine Probleme. :)

Wir missverstehen uns sicher, daher ist das wohl auch nicht weiter diskussionswürdig.. :)
 
Achso, du meinst die cpp includen. Stimmt, das geht auch. Ist das schön? Macht man das?

Keine Ahnung :D
 
Natürlich macht man das. Es lohnt sich doch nicht immer jede Klasse oder Funktion die man einmal entwickelt hat in eine DLL auszulagern, um die in mehreren Projekten zu nutzen. Das ist wünschenswert, aber nicht immer sinnvoll (Aufwand/Nutzen).
 
Zurück
Oben