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 anHabe 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