Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 04.10.13 19:36 
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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
const
   QuricolLib = 'quricol32.dll';
...
function GetHBitmap(Text : PChar;  Margin : integer; Size : integer; Level : integer) : HBITMAP; stdcallexternal 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
ausblenden 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.
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Fr 04.10.13 20:00 
Lad die DLL doch einfach dynamisch, dann kannst Du auch einen vollen Pfad angeben, siehe LoadLibrary.

[edit] Ein Beispiel, wie so etwas aussehen könnte (direkt im Editor getippt, daher ohne Gewähr):
ausblenden volle Höhe 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]

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 04.10.13 21:19 
Hallo,
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Lad die DLL doch einfach dynamisch, dann kannst Du auch einen vollen Pfad angeben, ...

Danke, genau so geht's.
Oh, oh, irgendwie werde/bin ich wirklich alt und vergesse alles. :autsch:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.10.13 08:28 
Heute: Tag des Lehrers!

delphi.about.com/od/...g-static-dynamic.htm

Damit ich nicht nur offtopic bin, ein bisschen Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.FormCreate(Sender: TObject);
var QuricolLib, s :String;  hLib : Cardinal;
begin
QuricolLib := ExtractFilePath(Application.ExeName)+'dlls\quricol32.dll';
hLib := LoadLibrary(PWIDECHAR(QuricolLib));
if hLib = 0 then
  begin
    s := SysErrorMessage(GetLastError());
    ShowMessage(s);
  end;
//nur zum Testen
Memo1.lines.add(ExtractFilePath(Application.ExeName)+'DLLS');
Memo1.lines.add(QuricolLib);
end;

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 05.10.13 08:57 
Hallo,
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Damit ich nicht nur offtopic bin, ein bisschen Code: ...

Danke, funktioniert gut.

user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein