Einzelnen Beitrag anzeigen

Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

Registriert seit: 4. Nov 2003
Ort: Chemnitz
95 Beiträge
 
#6

Re: DLL vor allem anderen aus Ressourcen laden?

  Alt 22. Jul 2004, 19:43
Hi.

Du liebes Lieschen...

Also nochmal zum mitmeißeln (den Sourcecode der Unit hab ich): Statt (z.b.):
function AInitialize: Integer; stdcall; external 'AUDIOW32.DLL'; //die DLL wird im OnCreate aus der Ressource exportiert schreib ich jetzt:

einmal:
Delphi-Quellcode:
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;
und dann für jede Prozedur einzeln (jetzt auf's Bsp. angewandt):

{$IFDEF DYNAMIC_LINK}
var
_AInitialise: Pointer;

function FindWindowEx;
begin
GetProcedureAddress(_AInitialise, AUDIOW32.DLL, 'AInitialize');
asm
mov esp, ebp
pop ebp
jmp [_AInitialise]
end;
end;
{$ELSE}
function AInitialize: Integer; stdcall; external 'AUDIOW32.DLL' name 'AInitialise';
{$ENDIF DYNAMIC_LINK}

Muss ich noch irgendwas im Hauptprogramm dann ändern?

Was ich nicht verstehe: die Unit wird vor dem OnCreate geladen... soll heißen, wenn die Unit die DLL sucht, ist sie ja noch gar nicht da?! Oder sag ich der Unit mit dem Code: "Warte, bis die DLL extrahiert ist, dann darfst du loslegen."?

Edit: Ich hab mir jetzt mal den Source von dir nochmal genau angesehen... und muss leider sagen das ich überhaupt keinen Plan hab, wann das wo wie hinkommen soll .

C ya.
Support bacteria! They are the only culture some people have...
  Mit Zitat antworten Zitat