dll - kann keine funktion laden



  • folgendes:
    Ich hab mir 'ne dll gemacht. in der gibts vorerst nur mal 2 leere funktionen:

    #include "types.h"
    
    #define EXPORT __declspec(dllexport)
    
    EXPORT tPerson* AddPerson()
    {
      return NULL;
    }
    

    in der types.h steht:

    typedef struct _tPerson
    {
      int index;
    } tPerson;
    
    typedef tPerson*(*ptrNewPerson)(void);
    

    und da, wo ich die dll verwenden möcht, schreib ich das rein:

    #include "Types.h"
    int meineFunktion()
    {
      HMODULE AI = LoadLibrary("MyDll.dll"); //DLL laden
      ptrPersonIn ptr = NULL; //pointer auf die funktion
    
      ptr = (ptrPersonIn)GetProcAddress(AI, "AddPerson"); //funktionsadresse laden
      (*ptr) (); //aufruf
      FreeLibrary(AI); //DLL freigeben
      return 0;
    }
    

    nur, das problem ist, dass die funktion "GetProcAddress" nicht so richtig klappt, jedenfalls bleibt in der variable ptr immer NULL stehen
    Weiß jemand, warum?



  • Ein ähnliches Problem hatte ich vorhin 😉

    Schreib in der types.h mal so:

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    // hier die Deklarationen und Funktionen
    
    #ifdef __cplusplus
    }
    #endif
    

    GetProcAddress findet die Funktion in der DLL nicht, da dort die Funktion nicht genau so heißt, sondern da werden Zeichen wie @s drangehängt 😉



  • oder du fügst eine "dateiname.def" datei zu deinem dll vc projekt hinzu und schreibst folgendes rein

    EXPORTS
    
    AddPerson
    

    dann klappts mit dem namen

    den declspec kram kannste dir dann auch sparn



  • So ganz klappt das bei mir noch nicht. Ich hab das jetzt zwar in die types.h reingetan, aber es passiert immernoch das selbe.
    Ich habs auch noch in der Quellcode-datei der DLL reingetan, da klappts aber auch nicht.
    Muss ich das in alle Dateien schreiben?



  • hast du meine variante ausprobiert?



  • Nach etwas probieren hab ichs mit deiner Variante geschafft! Thx!!!


Anmelden zum Antworten