DLL Funktion ruft andere DLL Funktion auf



  • Hi,

    schreibe gerade an einer DLL geschrieben, in der eine externe Funktion von außen aufgerufen werden soll, die innerhalb der DLL eine andere Funktion aufruft, aber irgendwie scheine ich die zweite Funktion noch nicht richtig zu deklarieren...
    Hier mal der Code:

    main.cpp

    ...
    extern "C" void __declspec(dllexport) Funktion1()
    {
        ...
        DllClass test;
        test.func();
    }
    
    void DllClass::func() {
        Beep(2000,2000);
    }
    ...
    

    main.h

    #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 */
    
    class DLLIMPORT DllClass
    {
      public:
        DllClass();
        virtual ~DllClass(void);
    
        void func();
    
      private:
    
    };
    
    #endif /* _DLL_H_ */
    


  • Ja, und was geht nicht?
    Wo weisst Du nicht weiter?



  • Also beim Kompilieren krieg ich folgende Ausgabe:

    ...
    DllClass::func()' redeclared without dllimport attribute after being referenced with dll linkage|
    obj\Release\main.o:main.cpp|| undefined reference to \_imp\_\_\_ZN8DllClassC1Ev'| obj\\Release\\main.o:main.cpp|| undefined reference to_imp___ZN8DllClassD1Ev'|
    obj\Release\main.o:main.cpp|| undefined reference to `_imp___ZN8DllClassD1Ev'|
    ||=== Build finished: 3 errors, 1 warnings ===|

    Tut mir Leid, dass ich das eben nicht geschrieben hatte; war davon ausgegangen, dass mein Fehler so schwerwiegend ist, dass mans sofort sieht.



  • Du hast den Konstruktor und den Destruktor nicht definiert!

    Edit:
    BTW: Du brauchst DllClass nicht zu exportieren, wenn Du die Klasse nur innerhalb der DLL benutzt (was bis jetzt so ist).

    Edit2:
    BTW: Was benutzt Du für einen Compiler / IDE?



  • Hey, also habe den Konstruktor und Destruktor jetzt mal definiert, das ändert aber nichts; Die Dateien sind bis auf die Funktionen "Funktion1" und "func" auch so von der IDE (Code::Blocks zusammen mit MinGW) erstellt worden.

    Ich exportiere doch DllClass auch gar nicht, oder? Eigentlich exportiere ich doch nur "Funktion1" und das muss ich auch, weil die von einem Programm genutzt wird (das klappt ohne "func" auch).



  • PsychoticStyx schrieb:

    main.h

    ...
    
    # define DLLIMPORT __declspec (dllexport)
    
    ...
    
    class DLLIMPORT DllClass
    
    ...
    

    ... ich denke doch, dass Du DllClass exportierst ... änder das mal in

    class DllClass
    

    ab.
    Edit:
    noch besser: schmeiss die nicht exportierten Deklarationen ganz aus dem Header-File raus.



  • Hey, also habe den Konstruktor und Destruktor jetzt mal definiert, das ändert aber nichts

    Das sollte mindestens die "undefined reference" Errors beseitigt haben.

    Edit:
    Kann es sein, dass Du den Code, der die Fehler verursacht hat, gar nicht gezeigt hast? Zeige mal auch den Code, der die Funktion1() aufruft!



  • Jep mit deiner Änderung funktionierts!
    Vielen Dank euch beiden!


Anmelden zum Antworten