Habe jetzt mal eine einfach DLL erstellt, die auch nur eine Funktion enthält
In LS wird die function so deklariert:
Declare Function GetHash Lib "filehash" (Byval strFileName As String ) As String
Der Aufruft erfolgt dann über
Sub Click(Source As Button)
Msgbox GetHash ("e:\nstart.exe")
End Sub
Der Rückgabewert ist vom Typ String und liefert einen SHA2Strength(512) Wert zurück.
In der DLL sind diese Dinge momentan noch fest verdrahtet.
Das wird sich aber noch ändern.
Betrachtet die DLL einfach als kleines Spielzeug für zwischendurch.
Hier der source code der DLL
/*
DLL filehash.dll
*/
#include "CHash.cpp"
extern "C"
{
extern _declspec(dllexport)
char *GetHash ( char *fileName );
char *GetHash ( char *fileName )
{
try
{
CHash hashObj; // Define a CHash object
/* Set the algorithm
*/
hashObj.SetHashAlgorithm(SHA2);
/* Set hash format
*/
hashObj.SetHashFormat(3);
/* Set the SHA-2 strength
*/
hashObj.SetSHA2Strength(512);
/* Set the operation
*/
hashObj.SetHashOperation(FILE_HASH);
/* Set the file
*/
hashObj.SetHashFile(fileName);
/* Now HashIt !
*/
CString outHash;
outHash = hashObj.DoHash();
/*convert CString to char
*/
char * hash_char= new char[outHash.GetLength()+1];
strcpy(hash_char, outHash);
/* return hash_char
*/
return hash_char;
}
catch(...)
{
return "ERROR";
}
}
}
Und mit ein bisschen LS drumherum kann man sehr schön herausfinden, wie viele echte Dubletten eines Anhangs sich z.B. in der Maildatei befinden. ( übrigens 9 sec für eine Datei von 150MB über eim 100Mbit Netz )...
Kleine Anmerkung: Der Quellcode ist hier natürlich nicht vollständig angebildet und so auch nicht kompilierbar. Ich weiss auch, daß man DLLs in CPP anders aufbauen kann; brauche hier aber keinen MFC support. Außerdem bleibt das auch für einen Anfänger in der dargestellten Form nachvollziehbar.
und hier die DLL zum Download ( ins System32 Verzeichnis der Win Installation kopieren )