Header in Dynamic Link Project includieren
-
Hey,
ich habe ein dll Projekt erstellt in dem ich den "glew.h" header inkludiere. Der Build des .dll Projekts ist erfolgreich; wenn ich die .dll allerdings in einem Projekt verwende will der Compiler die "glew.h" header Datei inkludieren. Wie kann ich im .dll Projekt angeben, dass er die Headerdatei nur beim .dll build importieren soll? Muss ich die glew Bibliothek dafür statisch importieren? Ich möchte in dem Projekt welches die .dll verwendet den glew.h Header nicht importieren müssen.
liebe Grüße
-
Das liegt doch an Dir, wie Du die Header aufbaust.
Der Header für die Delaration der DLL darf diese andere Headerdatei eben nicht verwenden.
-
Danke für deine Antwort!
Ich glaub ich steh auf der Leitung
Wenn ich eine Klasse hab die eine gewisse Funktionalität einer externen DLL aufruft, muss ich die Header dieser externen DLL in dieser Klasse includen um sie nutzen zu können. Wenn ich meine eigene DLL nun exportiere und diese Klasse letztendlich in einem Programm verwenden will, geht die #include Direktive in dieser Klasse doch nicht weg? -> Das Programm ruft die Klasse auf, welche auf die externe DLL verweist.
liebe Grüße,
Georg
-
Was genau heißt "in der Klasse includen"?
-
Danke für deine Antwort!
Naja, ich muss ja die Headerdateien der DLL einbinden, um sie verwenden zu können, oder? Als Beispiel:
Mein DLL Projekt:
#include "externeDll.h" class Foo { public: __declspec( dllexport ) void func1(); //Funktionalität benötigt "externeDLL.h" };
Projekt, welches auf der DLL aufbaut:
#include "foo.h" //benötigt leider auch "externeDLL.h" int main() { Foo foo(); foo.func1(); .. };
-
Hallo,
ich bin neu hier und lese gerad ein wenig die Beiträge...
Würde dir sowas hier helfen?
#include "DefaultConfig_Windows_Default.h" if (DEFAULTCONFIG_MAXED-DEFAULTCONFIG_STARTER) { askUserIfWeShouldSaveBeforeLoad(); char* pcSelectedConfig = 0; char *pcTitle = m_pML->getc(DEFAULTCONFIG_STARTER); switch (DEFAULTCONFIG_STARTER) { default: case DEFAULTCONFIG_MAXED: pcSelectedConfig = (char*)DefaultConfig_Windows_Default; break; } readConfigData(pcSelectedConfig, TRUE, FALSE); m_pGuiConstruct->setStatusBar(STATUSBAR_CONFIGDEFAULT_SUGGESTED);
Oder meinst du etwas anderes?
Ich benutze keine dll's, aber musste auch weitere header dateien einbinden.Gruß
-
Schoasch schrieb:
Naja, ich muss ja die Headerdateien der DLL einbinden, um sie verwenden zu können, oder? [...]
Naja, du wirst irgendwoher die passende Definition deiner Klasse brauchen, das ist korrekt. Allerdings muss beim Kompilieren der dll eben ein dllexport stehen wo beim Benutzen der dll ein dllimport stehen muss. Wie du deine Header organisierst, ist C++ völlig egal und der dll auch. Die dll weiß nichtmal, dass es einen Header gibt...
-
Naja, du wirst irgendwoher die passende Definition deiner Klasse brauchen, das ist korrekt. Allerdings muss beim Kompilieren der dll eben ein dllexport stehen wo beim Benutzen der dll ein dllimport stehen muss. Wie du deine Header organisierst, ist C++ völlig egal und der dll auch. Die dll weiß nichtmal, dass es einen Header gibt...
Ist dies auch bei einem dynamischen Projekt der Fall? Denn ich habe DLLs bis jetzt immer so genutzt dass ich die .libs, header und die dll gelinkt habe - dllimport hab ich noch nie gebraucht. Hab ich da grundlegend etwas falsch verstanden?
liebe Grüße
-
Wie bitte hast du denn Header gelinked!?
-
Ich entschuldige, ich habe die Header included, die .libs gelinkt und die .dlls in das Debug Verzeichnis kopiert.
-
Der Punkt ist: Ich hab das Gefühl, dass du irgendwie was falsch verstanden haben musst, was die Funktionsweise von Headern betrifft. Header sind erstmal einfach nur Dateien die Quellcode enthalten. Was genau du wie in welche Header organisierst und ob überhaupt, ist völlig dir überlassen, C++ sagt nur, dass es #include gibt und was es tut, nicht aber, wie du es zu verwenden hast. Es gibt lediglich gewisse Konventionen darüber, was in der Regel sinnvoll ist. Eine dll oder lib existiert jedenfalls völlig unabhängig von irgendwelchen Headerdateien. Der lib oder dll ist es völlig egal, ob jetzt irgendwo irgendwelche Header verwendest oder was auch immer. Um die in einer lib bzw. dll befindlichen Dinge nutzen zu können, wirst du in deinem Code aber entsprechende Deklarationen benötigen. Da du diese Deklarationen in der Regel sowohl beim Erstellen der lib bzw. dll als auch beim Verwenden derselben brauchen wirst, ist es in der Regel sinnvoll, diese Definition in Header zu packen, die überall benutzt werden können, um nicht an allen Orten den selben Code schreiben und konsistent halten zu müssen.