Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: DLL vor allem anderen aus Ressourcen laden?

  Alt 22. Jul 2004, 19:02
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}
Andreas
  Mit Zitat antworten Zitat