Mathematiker - Fr 04.10.13 19:36
Titel: DLL-Ordner ändern
Hallo,
ich versuche die 'quricol32.dll' von Serhiy Perevoznyk zur Erzeugung von QR-Codes zu nutzen. Das funktioniert auch perfekt.
Gegenwärtig verwende ich den Original-Vorschlag zum Aufruf der DLL-Funktion
Delphi-Quelltext
1: 2: 3: 4:
| const QuricolLib = 'quricol32.dll'; ... function GetHBitmap(Text : PChar; Margin : integer; Size : integer; Level : integer) : HBITMAP; stdcall; external QuricolLib name 'GetHBitmapA'; |
Aus verschiedenen Gründen möchte ich aber nicht, dass die DLL im Ordner der Exe liegen soll, sondern in einem Unterordner mit dem Namen 'dlls'. Mit
Delphi-Quelltext
1: 2:
| const QuricolLib = 'dlls\quricol32.dll'; |
funktioniert dies auch. Meine Frage ist nun, ob es auch eine andere Möglichkeit gibt.
Konkret möchte ich erst zur Laufzeit des Programms die Lage der DLL angeben.
Delphi-Quelltext
1: 2: 3:
| var QuricolLib, ordner : string; ... QuricolLib := ordner+'quricol32.dll'; |
geht leider nicht, da dann der Quelltext nicht übersetzt wird. Nach external soll bei Delphi 5 eine Stringkonstante stehen, was ordner+'quricol32.dll' nicht ist.
Gibt es eine Lösung? Danke.
Beste Grüße
Mathematiker
WasWeißDennIch - Fr 04.10.13 20:00
Lad die DLL doch einfach dynamisch, dann kannst Du auch einen vollen Pfad angeben, siehe
LoadLibrary [
http://msdn.microsoft.com/library/ms684175%28VS.85%29.aspx].
[edit] Ein Beispiel, wie so etwas aussehen könnte (direkt im Editor getippt, daher ohne Gewähr):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit DeineUnit;
type TGetHBitmap = function(Text: PChar; Margin, Size, Level: integer): HBITMAP; stdcall; const QURICOLLIB = 'dlls\quricol32.dll'; var DLLHandle: THandle; GetHBitmap: TGetHBitmap; ... function Irgendwas: HBITMAP; begin if Assigned(GetHBitmap) then Result := GetHBitmap(...) else Result := 0; end; ...
initialization DLLHandle = LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + QURICOLLIB)); if DLLHandle <> 0 then GetHBitmap := GetProcAddress(DLLHandle, {$IFDEF UNICODE}'GetHBitmapW'{$ELSE}'GetHBitmapA'{$ENDIF}); finalization if DLLHandle <> 0 then FreeLibrary(DLLHandle);
end. |
[/edit]
Mathematiker - Sa 05.10.13 08:57
Hallo,
hathor hat folgendes geschrieben : |
Damit ich nicht nur offtopic bin, ein bisschen Code: ... |
Danke, funktioniert gut.
hathor hat folgendes geschrieben : |
Heute: Tag des Lehrers! |
Wow, ich habe nur noch Festtage.
Am 1.Oktober haben meine "Lieblinge" mir auch schon gratuliert. Da war "Tag der älteren Menschen". :mrgreen:
Beste Grüße
Mathematiker