![]() |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
free(winampDsp); return 0; müßten ja eigentlich in einen verbund bleiben. Damit bei einen Fehler Das Mem auch wieder freigegeben wird. Weiß jetzt nicht welche IF anweisung du meinst. :oops: grüße |
Re: Dynamisches Array oder Klasse als Array auslegen
Schau mal:
Delphi-Quellcode:
Verständlicher so?
begin
// ... // Exceptions zurück auf Defaultwert Set8087CW(Saved8087CW); Result := 0; // spätestens hier initialisieren if winampDsp^.hDll <> 0 then begin // ... FreeMem(winampDsp); end; // else Result := 0; // wird hier nicht mehr gebraucht end; marabu |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
Aber wo springe ich dann hin wenn das FakeWindow nicht erstellt werden konnte. Dann muss ich ja auch den Speicher freigeben und das Result := 0; an die Anwendung übergeben. An die erste Zeile kann ich ja dann nicht springen. Grüße .. |
Re: Dynamisches Array oder Klasse als Array auslegen
Das von dir ausgemachte Problem existiert nicht. Wenn ich nichts übersehen habe, dann müsstest du bei einem code-walk-through feststellen, dass beim Scheitern von Create_Winamp_Window() die Routine Destroy_Winamp_Window() aufgerufen wird, wie vorher auch schon.
marabu |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
gruß |
Re: Dynamisches Array oder Klasse als Array auslegen
Irgendwie bekomme ich das nicht gebacken.
Delphi-Quellcode:
In BASS_WADSP_Load und AddDSP klappt jetzt alles bis in der obigen GetName funktion
// Returns the name of a loaded Winamp DSP plugin
function BASS_WADSP_GetName(plugin: HDSP): LPTSTR; stdcall; Var strRet: PChar; winampDSP: WINAMPPLUGINPROPDSP; begin strRet := nil; winampDsp := GetDSP(plugin); if winampDsp <> nil then begin strRet := winampDsp^.pModule^.description; end; Result := strRet; end; wenn ich von dort aus in winampDsp := GetDSP(plugin); springe
Delphi-Quellcode:
werden mir bei der ausgabe Result := winampDsp; komplett andere Werte angegeben
function GetDSP(handle: DWORD): WINAMPPLUGINPROPDSP; stdcall;
var a: DWORD; winampDSP: WINAMPPLUGINPROPDSP; begin if not handle <> 0 then Result := nil; for a := 0 to winampDSPcounter do winampDsp := Winamp_DSP^[a]; if (winampDSP <> nil) and (winampDSP^.handle = handle) then begin Result := winampDsp; end else Result := nil; end; so als wenn die letzen aufrufe nicht mehr existieren würden. gruß |
Re: Dynamisches Array oder Klasse als Array auslegen
Niemand ne Idee ?
Schade... gruß |
Re: Dynamisches Array oder Klasse als Array auslegen
Hallo Emil,
kann es nicht sein, dass der Rückgabewert von GetDSP ein Zeiger PWinampPluginPropDsp ist? Außerdem bist du eventuell in eine weitere Falle getappt: während in C++ die function mit der Rückgabe eines Wertes verlassen wurde, verbleibt Object Pascal im code block, auch wenn du der Pseudo Variable Result etwas zugewiesen hast. Grüße vom marabu |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
ich noch 100% Werte danach wird ein Handle von 1 übergeben was auch stimmt (habe es mit der originalen DLL verglichen) Das Modul mit Version und Description sind auch in Ordnung. Zum schluß kommt FreeLibrary(winampDsp^.hDll); Habe erst gedacht das diese zeile alle werte löscht. Müßte sie theoretisch auch, habe sie deshalb mal auskommentiert. Aber gleiche fehler. Alle Werte gehen unterwegs verloren. Eine Pseudo Variable kannst eigentlich nicht sein ist ja alles an daten vorhanden die ich zur übergabe benötige. Gruß |
Re: Dynamisches Array oder Klasse als Array auslegen
Result ist eine Pseudo-Variable, sie steht für den Funktionsrückgabewert. Du könntest genausogut den Rückgabewert an den Funktionsnamen übergeben, was aber nicht so wartungsfreundlich ist. Die Funktion wird dabei aber nicht beendet, wie z.B. bei der Anweisung return in C. Soweit die Begriffsklärung. Näheres findest du in der Delphi Online-Hilfe. Hier mein Versuch einer Umsetzung - ohne doppelte Negation:
Delphi-Quellcode:
Gruß
function GetDSP(handle: DWORD): WINAMPPLUGINPROPDSP;
var i: DWORD; begin if handle <> 0 then for i := 0 to Pred(winampDSPcounter) do begin Result := Winamp_DSP^[i]; if Assigned(Result) and (Result^.handle = handle) then Exit; end; Result := nil; // GetDSP := nil // gleichwertig end; marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 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