Auf eine DLL zugreifen



  • hi,

    ich will auf eine Funktion die in einer DLL steht zugreifen. Die Funktion sieht so aus:

    void Beschreibung(TMemo *info)
    {
      info->Lines->Add("BeispielText");
    }
    

    mein Code sieht so aus:

    int TfrmDllManager::testDLL(AnsiString datei)
    {
      try
      {
        void (__stdcall *Beschreibung)(TMemo *info);
        HINSTANCE hdll=LoadLibrary( datei.c_str() );
        Beschreibung = (void(__stdcall*)(TMemo *info))
        GetProcAddress(hdll, "_Beschreibung");
    
        Beschreibung(memInfo);
        FreeLibrary(hdll);
      }
      catch(...)
      {
        return 0;
      }
      return 1;
    }
    

    doch leider gibts eine Zugrifsverletzung bei 0x00000000, heißt das die funktion ins leere greift oder ist mein aufruf falsch?



  • Probiers mal so:

    int Beschreibung(TMemo *info) 
    { 
      int iRetVal = 0;
    
      if (info)
      {
         info->Lines->Add("BeispielText");
         iRetVal = 1;
      }
    
      return iRetVal;
    }
    
    int TfrmDllManager::testDLL(AnsiString datei)
    {
      try
      {
        IMPFUNC DllFunktion;
        typedef int (__stdcall *IMPFUNC) (TMemo *); // Zeiger auf die DLL-Funktion
        HINSTANCE hdll=LoadLibrary(datei.c_str());
    
        if (hdll) // Wenn DLL geladen
        {
           // DLL Funktion suchen
           DllFunktion = (IMPFUNC)GetProcAddress(hdll, "_Beschreibung");
    
           if (DllFunktion) DllFunktion(memInfo); // Funktion ausführen
    
           FreeLibrary(hdll);
        }
      }
      catch(...)
      {
        return 0;
      }
    
      return 1;
    }
    


  • leider geht das auch nicht. Dann werd ich das ganze mit Objekten machen statt Zeigern,d as geht wenichstens


Anmelden zum Antworten