Zitat von
HaCkAttaCk2001:
Kleine Ergänzung noch zu meinem Post oben: Mein Hauptprogramm selbst braucht diese
DLL nicht, aber eine
Unit, die ich verwenden muss. Kann ich vielleicht die
Unit erst später dazuladen lassen? Denn ich glaub das verheddert sich doch, wenn ich im Hauptprogramm die DLLs dynamisch lade, die die
Unit schon viel früher braucht... oder hab ich da nen Denkfehler?
Die
DLL muss mit LoadLibrary in dieser
Unit dynamisch geladen und freigegeben werden.
Wenn du von dieser
Unit keinen Sourcecode hast, dann hast du die A-Karte gezogen.
Ansonsten einfach in die
Unit mal nach dem Wort External suchen.
Delphi-Quellcode:
// Hier ein Beispiel (von Marcel van Brakel), wie man dynamisch oder statisch linken kann
procedure GetProcedureAddress(
var P: Pointer;
const ModuleName, ProcName:
string);
var
ModuleHandle: HMODULE;
begin
if not Assigned(P)
then
begin
ModuleHandle := GetModuleHandle(PChar(ModuleName));
if ModuleHandle = 0
then
begin
ModuleHandle := LoadLibrary(PChar(ModuleName));
if ModuleHandle = 0
then raise Ewin32Error.Create('
Library not found: ' + ModuleName);
end;
P := GetProcAddress(ModuleHandle, PChar(ProcName));
if not Assigned(P)
then raise EWin32Error.Create('
Function not found: ' + ModuleName + '
.' + ProcName);
end;
end;
{$IFDEF DYNAMIC_LINK}
var
_FindWindowEx: Pointer;
function FindWindowEx;
begin
GetProcedureAddress(_FindWindowEx, user32, '
FindWindowExW');
asm
mov esp, ebp
pop ebp
jmp [_FindWindowEx]
end;
end;
{$ELSE}
function FindWindowEx;
external user32
name '
FindWindowExW';
{$ENDIF DYNAMIC_LINK}