Zitat:
Denke wieder daran, dass ich mich mit den Bezeichner auf den C++ Code beziehe und du diese Namen in Delphi abwandeln musst.
Auch einen guten Morgen ...
ja werde ich
Was ich das bisher so sehe ist es fast unmöglich den Quelltext von C++ nach Delphi zu übersetzen
zu viele unterschiede und man weiß nicht wo man ansetzen soll.
Habe mich die halbe Nacht mit dem Problem beschäftigt warum beim initialisieren
von den modulen immer ein Totalcrash auftritt.
Bin dann darauf gekommen einen globalen Pointer als Funktion zu definieren
und diesen mit der aktiven ProcessAdresse zu verbinden.
Die Module laufen nun aber mit einschränkung.
Delphi-Quellcode:
pGetMod : function : pointer; stdcall;
pGetMod := GetProcAddress(winampDsp^.hDll, 'winampDSPGetHeader2');
Erst dadurch war es mir möglich die Module richtig einzulesen.
Für euch mag das selbstverständlich sein .. aber bei mir mit nicht so viel wissen
was Delphi angeht war das schon ein fortschritt.
Kannst vielleicht mal über diese Funktion schauen?
Da stimmt irgendetwas mit den IF abfrageverbund nicht
Fehler!
Zitat:
[Pascal Warning] BassWaDSP.pas(573): W1035 Return value of function 'BASS_WADSP_Load' might be undefined
Delphi-Quellcode:
// Läd ein Winamp DSP Plugin und übergibt das handle
// Koordinaten und ein User Callback können übergeben werden
function BASS_WADSP_Load(
const dspfile: PChar; x, y, Width, Height: integer;
proc: WINAMPWINPROC): HDSP;
stdcall;
var
winampDsp: WINAMPPLUGINPROPDSP;
cnt: integer;
begin
winampDsp := AllocMem(sizeof(WINAMPPLUGINPROPDSP));
FillChar(winampDsp, 0, sizeof(winampDsp));
Saved8087CW := Default8087CW;
//FPU - Exceptions deaktivieren
Set8087CW($133f);
// Library laden
// zuerst mit unicode versuchen
winampDsp^.hDll := LoadLibraryW(PWideChar(dspfile));
if (
not winampDsp^.hDll) <> 0
then
begin
// ansonsten Ansi
winampDsp^.hDll := LoadLibrary(dspfile);
end;
// Exceptions zurück auf Defaultwert
Set8087CW(Saved8087CW);
if winampDsp^.hDll <> 0
then
begin
pGetMod := GetProcAddress(winampDsp^.hDll, '
winampDSPGetHeader2');
if pGetMod <>
nil then
begin
// Fake Winamp Window erstellen
if (Create_Winamp_Window(winampDsp, x, y, Width, Height, proc)) = True
then
begin
cnt := 0;
winampDsp^.pModule := pGetMod;
if winampDsp^.pModule <>
nil then
begin
// Schleife durchlaufen bis kein Modul mehr gefunden wurde
repeat
Inc(cnt);
until winampDsp^.pModule^.getModule(cnt) =
nil;
// Anzahl der Module speichern
winampDsp^.NumberOfModules := cnt;
winampDsp^.module := -1;
InitializeCriticalSection(winampDsp^.csH);
// Addiere ein neues Winamp DSP Plugin
AddDSP(winampDsp);
// Übergebe das Handle
Result := winampDsp^.handle
end else
// Bei Fehler Winamp Fake Window beenden
Destroy_Winamp_Window(winampDsp);
end;
// Library freigeben
FreeLibrary(winampDsp^.hDll);
end else
// Hierhin, wenn irgend ein fehler autritt.
FreeMem(winampDsp);
end else
Result := 0;
end;
GRüße