c++ dll



  • hi,

    ich hätte mal eine frage zu c++ und dll's.

    ich habe versucht eine klasse (incl. konstruktor & destruktor) als dll zu compilieren. ich habe dabei das template-file der IDE Dev-C++ verwendet.
    naja das hab ich nun kompiliert, gegen mein mein programm, gelinkt was lediglich ein objekt instanziert.

    der compiler spuckt nun dies aus.

    [Linker error] undefined reference to `DllClass::DllClass()'

    und in dem .def file steht unter EXPORTS nichts. (wo eigendlich doch die exportierten funktionen stehen sollten, oder?)

    kann mir jemand einen rat geben, wie ich entweder die Klasse in der DLL richtig exportiere ( wobei mich auch der Export von Namespaces interessieren würde)
    oder was ich beim linken beachten muss.

    ---

    #ifndef _DLL_H_
    #define _DLL_H_
    
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
    
    #include <iostream>
    
    class DLLIMPORT DllClass
    {
      public:
        DllClass();
        virtual ~DllClass(void);
    
      private:
    
    };
    #endif /* _DLL_H_ */
    
    /* Replace "dll.h" with the name of your header */
    #include "dll.h"
    #include <windows.h>
    
    DllClass::DllClass()
    {
       std::cout << "Hello World !" << std::endl;
    }
    
    DllClass::~DllClass ()
    {
    
    }
    
    extern "C"
    BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                           DWORD reason        /* Reason this function is being called. */ ,
                           LPVOID reserved     /* Not used. */ )
    {
        switch (reason)
        {
          case DLL_PROCESS_ATTACH:
            break;
    
          case DLL_PROCESS_DETACH:
            break;
    
          case DLL_THREAD_ATTACH:
            break;
    
          case DLL_THREAD_DETACH:
            break;
        }
    
        /* Returns TRUE on success, FALSE on failure */
        return TRUE;
    }
    
    #include <iostream>
    #include <stdlib.h>
    #include "../testlib/dll.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      DllClass *dc = new DllClass();
      delete dc;
    
      system("PAUSE");	
      return 0;
    }
    

Anmelden zum Antworten