Bibliotheken
-
Du kannst mehrere Header und Source Dateien deiner DLL Datei /Projekt hinzufügen, dies ist kein Problem. Beim Kompilieren am Schluss wird alles in diese DLL Datei gepackt.
-
Hallo
Aber ich muss die zusätzlichen Headerdateien doch in der dlltest.h einbinden, oder? Wenn ich dies mache, muss ich, wenn ich die dll benutze dann auch die zusätzlichen Headerdateien mit zu meinen Projekt nehmen, weil er sonst die Header ja nicht öffnen kann. Stimmt das?
chrische
-
Du musst die headerdateien die du der dll datei hinzugefügt hast nirgendswo in der DLL Datei einbinden wenn du diese dort nicht benötigst.
In der EXE Datei musst du die headerdateien der DLL Datei einbinden, damit dieser die Klassen kennt.
-
Hallo
Da ich mir nicht sicher bin, ob ich jetzt totalen Mist mache, zeige ich mal meine Arbeitsschritte:
1. neues Projekt (dll) mit dem Namen dlltest
2. es wird eine dlltest.h und eine dlltest.cpp Datei erzeugt
2. hinzufügen von einer Header- und einer Sourcedatei einer Klasse (Name: Logfile.h und Logfile.cpp
3. dann kompilieren
4. neues Testprojekt anlegen
5. dlltest.h hinzufügen und inklidieren
6. dlltest.lib linken
7. wenn ich jetzt eine Instanz von Logfile anlegen will, dann meckert er immer, dass er den Bezeichneer nicht kennt.chrische
-
Ist so aber korrekt.
Wie sieht den die Klassendeklaration von der Logfile Klasse aus?
-
Hallo
Also ich habe jetzt noch einmal rumprobiert und musste feststellen, dass wenn ich ein dll Projekt erstelle keine Headerdatei generiert wird. Dann habe ich also eine Header und eine Sourcedsatei mit den Namen dlltest.h und dlltest.ccp. Ich füge diese also dem Projekt hinzu. Dann habe ich probiert eine kleine Klasse Test zu schreiben, welche nur etwas auf dem Bildschirm ausgibt. Die Headerdatei von Test muss ich nun nicht in dlltest.h inkludieren. Das bedeutet doch aber, dass in dlltest.h nichts steht. Zu was brauche ich die Datei dann überhaupt? Wenn ich die Test.h in der dlltest.h inkludieren muss, habe ich ja immer das Problem, dass wenn ich die dlltest.h in mein Projekt inkludiere er dann natürlich die Test.h nicht findet.
Es tut mir echt Leid, aber ich kapiere es wirklich nicht.chrische
-
Du erstellst ein DLL Projekt (in deinem Fall dlltest). Hier fügst du die benötigten Klassen die du später in dieser DLL Datei haben willst dem DLL Projekt hinzu (nicht includieren, sondern die Dateien dem Projekt hinzufügen). Hier musst du beachten das die Klassen mit dem Wörtchen AFX_EXT_CLASS oder __declspec(dllexport) deklarierst.
Bei MFC Dll Dateien musst du die erste Variante nehmen.
Bsp.class AFX_EXT_CLASS Irgendwas : public CObject {};Nun kannst du dein Projekt erstellen und und die header Datei aus dem DLL Projekt einbinden. Dann noch die Lib Datei mitlinken und das wars...
-
Hallo
Das bedeutet also, dass die dlltest.h, die ich neu hinzugefügz habe komplett leer ist? Ich werde das nachher mal probieren.
chrische
-
chrische5 schrieb:
Hallo
Das bedeutet also, dass die dlltest.h, die ich neu hinzugefügz habe komplett leer ist? Ich werde das nachher mal probieren.
chrische
Bei der header und source datei die automatisch erstellt werden beim projekt brauchst du nix zu ändern und kannst diese gerne ignorieren.
-
Hallo
Weil es immer noch nicht klappt hier mal die Dateien:
Dlltest.h und dlltest.cpp sind komplett leer. Wenn ich ein dll-Projekt starte, wird keine Headerdatei erstellt, also erstell ich immer ein Projekt und lösche alles aus der cpp-Datei. Vielleicht ist das ja das Problem.
Test.h:
#pragma once class __declspec(dllexport) Test { public: Test(void); ~Test(void); void out(void); };Test.cpp:
#include "StdAfx.h" #include "Test.h" #include <iostream> Test::Test(void) { } Test::~Test(void) { } void Test::out(void) { std::cout<<"Hallo"; }Diese Dateien habe ich zum Projekt dlltest hinzugefügt. Nun kompiliere ich das Projekt und es entsteht eine dlltest.dll und eine dlltest.lib
Nun das Projekt mit dem ich die Dll prüfe. Ich nenne es checkdll
Checkdll.cpp:
#include "stdafx.h" #pragma comment(lib,"dlltest.lib") #include "dlltest.h" int _tmain(int argc, _TCHAR* argv[]) { Test Hallo; return 0; }Er findet aber die Klasse Test nicht. Ich habe zu checkdll dlltest hinzugefügt und ich habe dlltest.dll zum Projekt hinzugefügt.
Vielen Dank für Eure (deine) Geduld.chrische