folgender Test:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
windows;
procedure blub; external 'F:\delphi\dlltest\test.dll' name 'blub';
procedure blub2; external 'test.dll' name 'blub';
begin
blub;
blub2;
end.
Delphi-Quellcode:
library test;
uses
windows;
procedure blub;
asm
nop
end;
exports blub;
begin
MessageBoxA(0,'
test',
nil,0);
end.
Ergibt 2 mal die MessageBoxA mit statsicher einbindung von unterschiedlichen Pfaden.
Macht man es aber dynamisch (und das sollte man immer bei Pfadangabe) dann wird die
dll nur ienmal geladen.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
windows;
var blub: procedure;
var blub2: procedure;
begin
@blub := GetProcAddress(LoadLibrary('F:\delphi\dlltest\test.dll'),'blub');
@blub2 :=GetProcAddress( LoadLibrary('test.dll'),'blub');
blub;
blub2;
end.
Und es liegt dann an Windows, wenn er den absoluten Pfad (bei schon einer geladenen
Dll) mit dem relativen Pfad als gleich ansehen soll und nicht an Delphi (statisch = Importtabelle = delphi kann nix dafür macht nur des was der Programmierer sagt)
Obwohl man dann noch darüber diskutieren kann obs am Programmierer oder wirklich an Windows liegt bei unterschiedlichen Pfaden.
Trotzdem: Wer eine statische Einbindung macht ist selbst schuld ^^
Bevor du alles umstruktuierst versuchs erstmal mit der dynamischen Einbindung.
PS: Entäuschend ist es eher wenn man keine Ahnung hat und es dann einfach mal auf die Programmiersprache / Umgebung schiebt.