Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Seltsamer Fehler bei dynamischem DLL-Laden (https://www.delphipraxis.net/26758-seltsamer-fehler-bei-dynamischem-dll-laden.html)

HaCkAttaCk2001 28. Jul 2004 21:02


Seltsamer Fehler bei dynamischem DLL-Laden
 
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:
Delphi-Quellcode:
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.

SirThornberry 29. Jul 2004 20:20

Re: Seltsamer Fehler bei dynamischem DLL-Laden
 
also ich hab mir mal die funktion genommen und versucht zu compilieren, funktioniert auch wunderbar. Den Aufruf kann ich allerdings nicht probieren da ich nicht weiß wie du "Module" definiert hast, also von welchem Typ es ist und wie der Typ declariert ist. In welcher zeile kommt der Fehler?

das einzige was bei mir ist:
[Warning] Unit1.pas(40): Return value of function 'AOpenVoices' might be undefined

Das solltest du noch beseitigen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz