DLL erzeugen mit Visual C++ und in einem anderen Projekt ansprechen



  • Hallo!

    Ich hab eine dlltest.dll mit folgender Header- und Sourcecodedatei erstellt.

    Header:

    /* "dlltest.h" */
    #ifndef DLLTEST_H
    #define DLLTEST_H
    
    class __declspec(dllexport) Test
    {
    private:
    	int m_iWert; 
    protected:
    	void ChangeValue(void);
    public:
    	Test();
    	~Test();
    	void Set(int Wert);
    	int Get(void);
    };
    #endif // DLLTEST_H
    

    Quellcodedatei:

    /* "dlltest.cpp" */
    
    #include "dlltest.h"
    
    Test::Test() : m_iWert(0)
    {
    }
    
    Test::~Test()
    {
    }
    
    int Test::Get()
    {
    	return m_iWert;
    }
    
    void Test::Set(int wert)
    {
    	m_iWert = wert;
    }
    

    Dann hab ich in Visual C++ ein neues Projekt mit hauptprogramm.cpp angelegt. Im gleichen Ordner befinden sich die Dateien dlltest.h und dlltest.dll.

    Das ist die main-Funktion 'hauptprogramm.cpp':

    #include <iostream.h>
    #include <windows.h>
    #include "dlltest.h"
    
    int main()
    {
    	Test t;
    	t.Set(43);
    	cout<<"Wert: "<<t.Get()<<endl;
    	MessageBox(NULL,"Programm beendet.","Notation",MB_OK);
    	return 0;
    }
    

    Jetzt bekomme ich folgende Fehlermeldung:
    Linker-Vorgang läuft...
    Bibliothek Debug/hauptprogramm.lib und Objekt Debug/hauptprogramm.exp wird erstellt
    hauptprogramm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Test::~Test(void)" (??1Test@@QAE@XZ)
    hauptprogramm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall Test::Get(void)" (?Get@Test@@QAEHXZ)
    hauptprogramm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Test::Set(int)" (?Set@Test@@QAEXH@Z)
    hauptprogramm.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall Test::Test(void)" (??0Test@@QAE@XZ)
    Debug/hauptprogramm.exe : fatal error LNK1120: 4 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    WARUM???????????????? 😕



  • Die dlltest.h muss wahrscheinlich nicht mal im selben Ordner des neuen Projektes vorhanden sein, schließlich steht ja in der dlltest.dll schon alles drin, oder?



  • Unter Projekt-> Einstellungen -> Linker musst Du noch
    dlltest.lib als zusätzlichen Bibliotheksmodul mit angegeben.
    Die Datei dlltest.lib sollte sich dann natürlch auch in einem Pfad befinden, den der Linker findet. (Entweder in das neue Projekt kopieren, oder zusäzlichen Bibliothekspfad für Linker mit angegeben.)

    Ich hoffe, das hilft.



  • Super jetzt funktioniert's!!!
    Muss die dlltest.h nun wirklich im gleichen Ordner sein? Die kann ich nicht weg lassen, oder?



  • Du brauchst auf jeden Fall die Klassendefinition von Test, dazu machst Du ja Dein include "dlltest.h". Die Datei selbst muß Du aber nicht unbedingt in deinen Projektordner kopieren. Es geht auch, wenn Du unter
    Einstellungen -> C/C++ -> Kategorie Präprozessor zusätzliche Includeverzeichnisse
    einfach den Pfad zur dlltest.h angibst.



  • du hast mir sehr geholfen ... danke


Anmelden zum Antworten