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...