Hi @ all.
Manche erinnern sich vielleicht noch über meine letzte Frage über dynamische
DLL-Einbindung. Nun, ich habe alle Prozeduren jetzt erfolgreich eingebunden und alles noch mehrmals nach Schreibfehlern etc. abgecheckt, aber ich kann mein Projekt nicht kompilieren, weil Delphi den Fehler: "Die Typen der tatsächlichen und formalen Var-Paramter müssen übereinstimmen" bringt.
So sieht der dynamisch Ladende Teil in der Audio.pas aus:
Delphi-Quellcode:
function AOpenVoices(
var nVoices: Integer): Integer;
var AOpenVoices: TAOpenVoices;
Handle: THandle;
begin
Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'
AUDIOW32.DLL'));
if Handle <> 0
then begin
@AOpenVoices := GetProcAddress(
Handle, '
AOpenVoices');
if @AOpenVoices <>
nil then begin
result:=AOpenVoices(nVoices);
end;
FreeLibrary(
Handle);
end;
end;
Das steht im "type" der Audio.pas:
Delphi-Quellcode:
TAOpenVoices = function(var nVoices: Integer) : Integer; stdcall;
function AOpenVoices(var nVoices: Integer): Integer;
Und so verwendet es das eigentliche Hauptprogramm (die Audio.pas ist in den uses eingebunden):
Delphi-Quellcode:
procedure TMainForm.SetState(AState: TPlayerState);
begin
if (State = psIdle) and (AState = psPaused) and Assigned(Module) then
begin
AOpenVoices(Module^.nTracks);
APlayModule(Module);
APauseModule;
State := psPaused;
end
//...etc.
Die ursprüngliche procedur in Audio.pas sah so aus:
function AOpenVoices(nVoices: Integer): Integer; stdcall; external 'AUDIOW32.DLL';
Wo liegt der Fehler?! Ich habe an den Variablen-Deklarationen etc. nichts verändert!
C ya.
Support bacteria! They are the only culture some people have...