[Geloest] MD5-Hash aus AnsiString
-
Hallo,
so sieht das bei mir auf dem CBuilder 6 Pro aus und funktioniert einwandfrei.
md5c.cpp md5class.cpp
dem Projekt hinzugefügt und fertig
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "md5class.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- String getMD5(String s) { CMD5 md5; md5.setPlainText((char*)s.c_str()); return md5.getMD5Digest(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage (getMD5 (Edit1->Text)); }
Gruß myerscola
-
Hatte vor einger Zeit auch nach einer MD5-Funktion gesucht. Hatte bestimmt 10 verschiedene Cpps und bei allen bekam ich auch unresolved external-Errors..
Hab keine Ahnung woran das liegen könnte.
-
Ich habe es gerade eben auch getestet und es funktioniert. Es gibt zwar ein Haufen Warnungen, da in der md5.cpp noch sehr veralteter Syntax verwendet wird aber funktionieren tuts (BCB5).
-
myerscola schrieb:
Hallo,
so sieht das bei mir auf dem CBuilder 6 Pro aus und funktioniert einwandfrei.
md5c.cpp md5class.cpp
dem Projekt hinzugefügt und fertig
Wenn ich so verfahre, erhalte ich o.g. Meldungen. Auch, wenn ich
#include "md5class.h"
angebe, also ohne den eigentlichen Pfad zu beruecksichtigen.
-
Also, nun habe ich mich fuer die BCB3-DLL entschieden. Diese sieht folgendermassen aus:
#include "md5class.h" #include <vcl.h> #pragma hdrstop char* getMD5(char* s) { CMD5 md5; md5.setPlainText(s); return (char*)md5.getMD5Digest(); } int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { return 1; }
Diese konnte ich auch einwandfrei erstellen, ausser dass es die besagten Warnungen gab.
Und die entsprechende Implementierung in meiner BCB5-Projektheader:
class TDLLHash { private: typedef char* (DLLFUNCTION)(char*); DLLFUNCTION *pDllFunction; public: TDLLHash(); char* CallDllFunction(char* s); };
Und die Funktionen in der CPP:
TDLLHash::TDLLHash() { HINSTANCE hInstance; hInstance = ::LoadLibrary("hash.dll"); pDllFunction=(DLLFUNCTION*)::GetProcAddress((HMODULE)hInstance,"getMD5"); } char* TDLLHash::CallDllFunction(char* s) { char* c=(*pDllFunction)(s); return c; } //... String __fastcall TfMain::GetMD5(String s) { TDLLHash dllHash; return String(dllHash.CallDllFunction(s.c_str())); }
Leider erhalte ich nun einen Exception-Fehler wegen Zugriffsverletzung bei 0x00000000...
Was mache ich falsch? - Ich muss dazu sagen, dass ich noch nie eine DLL verwendet oder gar erstellt habe.
-
Warum willst du denn unbedingt eine dll erstellen?
Versuche erstmal deine Linkerfehler zu beseitigen. Du hast mit Sicherheit irgendwas vergessen in dein Projekt einzubinden oder hast du die md5class.cpp geändert?
-
Ich habe gar keine Datei geaendert und bin haar genau so vorgegangen, wie mit dem BCB3. Beim BCB3 laeuft's, beim BCB5 bekomme ich o.g. Fehlermeldungen. Ich bin das mittlerweile 20 mal durchgegangen, Schritt fuer Schritt.
Darum muss ich wohl eine dll im BCB3 erstellen, um diese dann in meinem eigentlichen Projekt einbinden zu koennen. Zwar nicht die schoenste Loesung, aber wenn's halt nicht anders klappt...
-
Es geht auch mit dem BCB5. Ich habe es selber probiert, wie ich vorhin auch schon geschrieben habe.
Wenn du willst, kannst du mir ja dein Projekt per Mail schicken, dann schau ich mir das mal an.
-
Ich habe auch schon ein neues Projekt gestartet, nur mit dieser MD5-Funktionalitaet, habe die besagten beiden CPP-Dateien eingebunden, den Header includiert und es kommen dieselben Fehler, im BCB3 funktioniert's aber. Also scheint meine BCB5-Version 'ne Macke zu haben. Ich muss aber mit dem Projekt damit arbeiten, weil der BCB3 dafuer zu alt ist. Also gehe ich diesen Kompromiss ein.
Nun waere ich allerdings froh, wenn man mir dabei weiterhelfen koennte.
-
Gerade mal noch das hier gefunden: http://www.md5hashing.com/c++/
Werd' ich nachher gleich mal ausprobieren.
-
Oh Mann, mein BCB5 hat wirklich 'n Knacks weg. Jetzt bekomme ich beim Ausfuehren vom BCB heraus die Meldung: "Vorgang kann nicht erzeugt werden: Der Verzeichnisname ist ungueltig." Gehe ich allerdings ueber
Projekt -> xxx erzeugen
, wird die Anwendung anstandslos erzeugt und funktioniert auch beim Ausfuehren der exe.Also mit der vorhin besagten Klasse funktioniert's nun endlich mal. Geloest.