Problem mit DLL! <= Immernoch :-(



  • Hi habe ne DLL bekomme deren Funktionen ich nutzen will!

    folgende funktion stellt sie bereit:

    function MD5HashFile(N: PChar; Callback: TMD5HashFileCallback; var Hash: MD5Digest): BOOL; stdcall;
    damit kann man eine Datei hashen und die bietet auch die moeglichkeit eine fortschrittsanzeige via callback an

    Habe jetzt an hand der FAQ folgendes gebaut:
    .h:

    typedef bool (__stdcall *PMD5HashFileCallback)(DWORD Position, DWORD Size);
    typedef bool (DLLMD5HashFile)(LPSTR File, PMD5HashFileCallback Callback, PVOID Hash);
    DLLMD5HashFile   *MD5HashFile;
    

    cpp:

    bool bResult;
    unsigned long hash;
    //if (DLLMD5HashFile)  ging so nicht weil bool zurückgegeben wird denke ich mal
      bResult = (*DLLMD5HashFile)(AnsiString(Temp.Pfad + Temp.FileName).c_str(),*md5Callback,*hash); // hier tritt der Fehler auf!!!
    

    aber bekomme die fehler:
    [C++ Fehler] HashU.cpp(44): E2108 Ungültige Verwendung von typedef 'TfrmHash::DLLMD5HashFile(char *,bool (__stdcall *)(unsigned long,unsigned long),void *)'

    [C++ Fehler] HashU.cpp(44): E2062 Unzulässiger Indirektionsoperator

    Hoffe mir kann jemand helfen

    THX

    Dagsta



  • .



  • Probiers mal mit:

    HINSTANCE dllInst = LoadLibrary("BlaaBlaa.dll");
    
    DLLMD5HashFile MD5HashFile;
    MD5HashFile = (DLLMD5HashFile*)GetProcAddress(dllInst, "MD5HashFile"); // Der  String ist der Name der Funktion in der DLL
    
    if(MD5HashFile == NULL)
    {
    // Fehlerbehandlung
    }
    
    if(MD5HashFile(AnsiString(Temp.Pfad + Temp.FileName).c_str(),&md5Callback, &hash))
    {
    
    }
    

    * durch & tauschen!
    Mit meinem Code muß nicht einmal die Lib- Datei eingebunden werden.

    mfg
    X



  • Sorry bei der Callback ohne Referenzierung

    if(MD5HashFile(AnsiString(Temp.Pfad + Temp.FileName).c_str(), md5Callback, &hash)) 
    { 
    
    }
    


  • Danke war nicht komplett richtig aber habe es dank dir dann doch geschaft richtig ist:

    .h:
    typedef bool (__stdcall *PMD5HashFileCallback)(Cardinal Position, Cardinal Size);
    typedef bool (__stdcall DLLMD5HashFile)(LPSTR File, PMD5HashFileCallback Callback, PVOID Hash);
    DLLMD5HashFile   *MD5HashFile;
    
    HINSTANCE dllInst;
    
    .cpp:
    dllInst = LoadLibrary("hashlib.dll");
    MD5HashFile  = (DLLMD5HashFile*)::GetProcAddress((HMODULE)dllInst, "MD5HashFile");
    if(MD5HashFile == NULL)
    {
          // Fehlerbehandlung
    }
    else if(MD5HashFile(AnsiString(Temp.Pfad + Temp.FileName).c_str(),md5Callback, &hash))
    {
      //
    }
    

    Danke nochmal

    Dagsta


Anmelden zum Antworten