Namespace in dll
-
Stopp.
Welchen Header?
Ich kompiliere die DLL, im Hauptprogramm linke ich die Bibliothek hinzu und habe die Dll im Ordner des Hauptprogramms.
-
Ich mach sonst nix mit DLLs. Aber trotzdem ein paar Hinweise von mir:
- Was haben <windows.h> und <iostream> im Header zu suchen? Du verwendest davon ja gar nichts. Das using namespace std; würde ich auch aus dem Header entfernen.
- Du hast scheinbar im Hauptprogramm vergessen, dll.h zu inkludieren. Das mit dem __declspec-Zeug musst Du Dir nochmal von wo anders abgucken (falls Du es überhaupt brauchst). Das Hauptprogramm braucht wahrscheinlich die Deklarationen, die im Header stehen mit DLL=__declspec(dllimport). Dumm nur, dass Du dieses Makro im Header anders definierst.
-
JonasH schrieb:
Stopp.
Welchen Header?
Ich kompiliere die DLL, im Hauptprogramm linke ich die Bibliothek hinzu und habe die Dll im Ordner des Hauptprogramms.Linken und Kompilieren sind nicht dasselbe. Dem Compiler ist es schnurz, was Du später sonst wie dazu linkst. Er muss die Funktionsdeklarationen sehen. Und die holt man sich typischerweise über Header-Dateien. Dazu sind die ja da.
-
Ok,
die nicht benötigten Teile sind raus
Ich glaube ich habe mich etwas falsch ausgedrückt, ich mache aus der dll.cpp und der dll.h eine DLL und das Hauptprogramm sollte mit der Quelldateien der Dll nichts zutun haben, oder habe ich da unrecht? Ich probier das jetzt mal mit der inkludierung der Headerdatei der DLL.
-
Klappt.
Allerdings erscheint mir das dann doch etwas umständlich, zusätzlich zu der Bibliothek auch noch den Header der DLL einzubinden. Geht das auch anders?
-
Was hat das Ganze denn mit der DLL zu tun? Wenn du eine Funktion, eine Variable oder eine Klasse benutzen möchtest, muss zumindest die Deklaration sichtbar sein. Dabei ist es völlig egal, ob die Implementierung in einer DLL, einer statischen Bibliothek, einer simplen Objektdatei oder sogar in der selben Datei wie der Aufruf steckt.
-
Ich dachte, dies hätte ich in der DLL getan, und mit der Bibliothek dem Hauptprogramm mitgeteilt; sodass ich dies nicht mehr im Hauptprogramm brauche. Aber das scheint ja nicht zu klappen...
Übrigens: Danke bis hierhin!!!
-
Ok, ich probiere es jetzt einmal über eine Klasse, schaut bis jetzt gut aus außer bis auf das:
#include <iostream> using namespace std; #define DLL __declspec(dllexport) #ifdef __BORLANDC__ && __MSDOS__ #include <conio.h> #elif __WIN32__ || _MSC_VER #define clrscr() system("cls") #else #define clrscr() cout << "clrscr() – Fehler!!\n" #endif //hier gehts los!!! DLL class JoRa { public: JoRa(const char* msg) { switch (msg) { //Fehler: switch quantity not an integer case "pause": pause(); break; case "cls": cls(); break; default: cout << "Unbekannte Funktion!"; } } ~JoRa() {} //Funktionen void pause() { cout << "Bitte Eingabe drücken!"; getchar(); } void cls() { clrscr(); } };und wenn ich mit der maus auf msg halte, kommt: UINT msg
das soll doch ein char* sein!?! Ich versteh´s nicht mehr!
-
ok, ich hab es jetzt.
Ich binde einfach den Header ein, das funktioniert prima.Danke an alle, die geholfen haben!!!
-
Wo ist denn der Sinn bei der DLL, wenn Du im Header eh inline-Funktionen definierst?
Lass das mit den DLLs doch einfach sein, wenn Du das Konzept der getrennten Übersetzung noch nicht verstanden hast und scheinbar auch noch nichts von der one-definition-rule gehört hast.