Einzelnen Beitrag anzeigen

Benutzerbild von HaCkAttaCk2001
HaCkAttaCk2001

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

Seltsamer Fehler bei dynamischem DLL-Laden

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