[Linker Fehler] Delayed load module RSA.DLL was not found
-
Hi!
Ich habe meine DLL über Projekt->Optionen->Erweiterter Linker eingebunden, bekomme aber beim compilieren immer diese Fehlermeldung...
DLL und LIB sind im Verzeichnis?
1.Was kann ich tun um den Fehler zu beseitigen?
2.Ist die LIB nötig?thx
-
Moin,
kann es sein, dass die dll im Projektverzeichnis liegt und der Compiler nach dem Start der Anwendung die dll in Debug oder Release vermutet?. Ich glaube unter Options/Debug (sitze gerade nicht an meinem Arbeitsrechner...) kannst Du das Arbeitsverzeichnis einstellen, wo er auch nach der dll sucht.
Wenn er die Lib nicht findet, wie bindest Du die ein? Ich gehe immer den Weg, klicke in der Projektanzeige auf mein aktuelles Projekt, Hinzufügen und wähle dann die Lib-Datei aus. Dann sollte auch der Pfad stimmen.
Ich hoffe, ich konnte weiterhelfen.
VG Pixfreak
-
kann es sein, dass die dll im Projektverzeichnis liegt und der Compiler nach dem Start der Anwendung die dll in Debug oder Release vermutet?. Ich glaube unter Options/Debug (sitze gerade nicht an meinem Arbeitsrechner...) kannst Du das Arbeitsverzeichnis einstellen, wo er auch nach der dll sucht.
Debug gibts nicht...
Wenn er die Lib nicht findet, wie bindest Du die ein?
Erst hab ich nur die DLL über Optionen angegeben, dann mit Hinzufügen die Lib, aber erst als ich die DLL aus den Optionen rausgenommen habe, ging es.
Allerdings wenn ich nur die lib einbinde, wozu bracuhe ich noch die DLL?
Was steht in der LIB eigentlich, wozu ist die da?Sry für die Fragen, aber dies ist das erste mal das ich DLLs progge

[Edit]
...__declspec(dllexport) long _stdcall rsa_genkey(long,long,long); __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { long h = rsa_genkey(22,44,66); ...dann bekomm ich:
[Linker Fehler] Unresolved external '__stdcall rsa_genkey(long, long, long)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\CRAGANIZER\CRAGANIZER.OBJBei ohne DLL angeben nur Lib...
[/Edit]
-
Hier mal die DLL:
//--------------------------------------------------------------------------- #include <windows.h> #include <math.h> #include <assert.h> //--------------------------------------------------------------------------- // RSA-DLL //--------------------------------------------------------------------------- #pragma argsused long qe2(long,long,long); long inverse(long,long); void extended_euclid(long,long,long*,long*,long*); extern "C" __declspec(dllexport) long rsa_genkey(long,long,long); extern "C" __declspec(dllexport) long rsa_encrypt(long,long,long); extern "C" __declspec(dllexport) long rsa_decrypt(long,long,long); extern "C" __declspec(dllexport) char* getVersion(); int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- char* getVersion() { return "1.0"; } //--------------------------------------------------------------------------- long qe2(long x, long y, long n) { long s, t, u; s = 1, t = x, u = y; while (u) { if (u & 1) s = (s * t) % n; u >>= 1; t = (t * t) % n; } return s; } //--------------------------------------------------------------------------- void extended_euclid(long a, long b, long *x, long *y, long *d) { long q, r, x1 = 0, x2 = 1, y1 = 1, y2 = 0; if (b == 0) { *d = a; *x = 1; *y = 0; return; } while (b > 0) { q = a / b; r = a - q * b; *x = x2 - q * x1; *y = y2 - q * y1; a = b; b = r; x2 = x1; x1 = *x; y2 = y1; y1 = *y; } *d = a; *x = x2; *y = y2; } //--------------------------------------------------------------------------- long inverse(long a, long n) { long d, x, y; extended_euclid(a, n, &x, &y, &d); if (d == 1) return x; return 0; } //--------------------------------------------------------------------------- long rsa_genkey(long p, long q, long e) { return inverse(e, (p-1)*(q-1)); } //--------------------------------------------------------------------------- long rsa_encrypt(long m, long e, long n) { assert(m < n); return qe2(m, e, n); } //--------------------------------------------------------------------------- long rsa_decrypt(long c, long d, long n) { assert(c < n); return qe2(c, d, n); } //---------------------------------------------------------------------------
-
Hi,
ok, ich habe den Eintrag Arbeitsverzeichnis unter Projekt/Optionen Unterpunkt Debugger. Im Builder 2007 ist der Eintrag in der Mitte, im Turbo C++ Explorer ganz unten in der Liste.
Vielleicht kopierst Du Deine DLL einfach in das Debug oder Release-Build Verzeichnis, jenachdem welche Buildkonfiguration Du gerade hast.
Einbinden musst Du nur die LIB Datei, nicht die DLL, die sollte er ja selber laden. Die Lib ist quasi die Beschreibung für den Compiler, wie und welche Funktionen er aus der DLL nutzen soll.
Viele Grüße
Pixfreak
-
Also ich benutze den C++ Builder 6, da gibts kein releasebuild verzeichnis,
und die DLL und die Lib sind im ProjektverzeichnisAlso starten tut er ohne:
__declspec(dllexport) long _stdcall rsa_genkey(long,long,long);schreib ich es allerdings in meine main cpp so bekomm ich vom linker
[Linker Fehler] Unresolved external '__stdcall rsa_genkey(long, long, long)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\CRAGANIZER\CRAGANIZER.OBJ
-
So, ich habe nun herausgefunden, das meine DLL das verzögerte Laden anscheinend nicht unterstützt.
Jetzt mache ich es Dynamisch.
Laden der DLL geht.Jedoch kann ich keine Funktion aus der DLL laden...
Hier Quellcode:
typedef long (_stdcall *rsa)(long,long,long); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { HMODULE RSA; rsa getVersion; RSA = LoadLibrary("RSA.dll"); if(RSA == NULL) { Application->MessageBoxA("Fehler beim Laden von 'RSA.dll'!","Fehler!",MB_ICONERROR); } getVersion = (rsa)GetProcAddress(RSA,"getVersion"); if(getVersion == NULL) { Application->MessageBoxA("Fehler beim Laden der Funktionen!","Fehler!",MB_ICONERROR); } ...
-
Hi,
wie erstellst Du denn Dein Projekt? Als Debug Version? Was hast Du denn mit der DLL vor? Wenn das die paar Funktionen sind, würde ich die einfach so in den Quellcode übernehmen.
VG Pixfreak
Äh, habe eben noch gelesen, dass Deine dll im Projektverzeichnis liegt. Die LIB muss in das Projekt eingefügt werden und dann kopiere mal die Dll nach Debug...
-
wie erstellst Du denn Dein Projekt? Als Debug Version?
Ich nehme mal an das mein Prog in der Debug Version ist, die DLL hab ich nun als Final Version eingestellet. Hat aber nichts gebracht...
Wenn das die paar Funktionen sind, würde ich die einfach so in den Quellcode übernehmen.
Klar, aber ich hätt sie gern in ner DLL

Die LIB muss in das Projekt eingefügt werden und dann kopiere mal die Dll nach Debug
Wo soll denn so ein Debug ordner sein? Also in meinem Projektverzeichnis nicht...
Die Lib ist schon lange drin.Hab jetzt mal ne *.def gemacht um Namen für die Funktionen zu haben, zum exportieren.
Nun bekomm ich ne Speicherverletzung...
-
So, hab das Prob nun mit dem Builder Tut gelöst, Danke nochmal!
