![]() |
Re: Dynamisches Array oder Klasse als Array auslegen
Eher so:
Delphi-Quellcode:
Ich weiß nicht wie du den Namenskonflikt aufgelöst hast.
begin
DspPtrArray := gWinampDSP; // natürlich die globale Variable !! // ... end; Zitat:
Grüße marabu |
Re: Dynamisches Array oder Klasse als Array auslegen
Delphi-Quellcode:
Verstehe ich jetzt nicht.
begin
DspPtrArray := gWinampDSP; // natürlich die globale Variable !! // ... end; Meine Globalen variablen sind diese. Muss ich jetzt noch eine hinzufügen um die Variable DspPtrArray zu initialisieren? Sorry für die vielleicht dumme Frage muss mich erst mal darin einarbeiten. Neue Sprache schwere Sprache :wink:
Delphi-Quellcode:
gruß
implementation
var winampDSPcounter : DWORD = 0; winampDSPhandle : DWORD = 0; PlayState : DWORD; DspPtrArray : PDspPtrArray = nil; winampDSP : PWinampDSPInfo; pGetMod : PWinampDSPHeader; |
Re: Dynamisches Array oder Klasse als Array auslegen
Du hattest in deinem Eröffnungsbeitrag aus dem C++ Code zitiert:
Code:
Wenn du den Namen für deine globale Variable in Object Pascal beibehalten willst, dann so:
WINAMPPLUGINPROPDSP **winampDSP = NULL;
Delphi-Quellcode:
Allerdings darf dann der Parameter der Prozedur nicht winampDSP heißen, da die C++ Bezeichner wegen der case sensitivity nicht 1:1 nach Object Pascal übertragen werden können:
var
winampDSP: PPWinAmpPluginPropDSP; // siehe Beitrag #2
Delphi-Quellcode:
marabu
procedure AddDSP(dsp: PWinampDSPInfo);
var a: DWORD; begin DspPtrArray := winampDSP; // ... DspPtrArray^[a] := dsp; |
Re: Dynamisches Array oder Klasse als Array auslegen
Leider ist jetzt alles etwas durcheinander geraten!
Dürfte ich dir den aktuellen stand( Quelltext) zuschicken? Soll nicht heißen das du daran arbeiten sollst. So könntest du dir aber ein aktuelleres Bild von den Fortschritt machen Die Variablen aus dem c++ Code sind nicht mehr identisch mit dem in Delphi da ich der übersicht wegen doch lieber Hausgemachte Delphi Variablen verwenden möchte. gruß |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
Freundliche Grüße marabu PS: So ein fortschrittliches Seniorenheim - mit Internetzugang ... |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
Beim C++ Quelltext sieht das anders aus. Muss mich erst informieren ob ich das darf.. Will den Author nicht übergehen ;) Auch Freundliche grüße. |
Re: Dynamisches Array oder Klasse als Array auslegen
Bin immer noch in der procedure
Delphi-Quellcode:
dort befindet sich im Original die Zeile
procedure AddDSP(winampDsp: WINAMPPLUGINPROPDSP); stdcall;
Code:
Habe gelesen das ++ das gleiche sein soll wie Inc()
winampDsp->handle = ++winampDSPhandle;
als Präfix-Operator: ++i; inc(i); oder i:= i + 1; Das winampDsp^.handle hat den wert 50 würde also wenn ich das so umsetze den Wert 1 bekommen Das scheint mir aber irgenwie nicht das richtige zu sein. gruß ,.. |
Re: Dynamisches Array oder Klasse als Array auslegen
Guten Morgen.
Code:
Das entspricht:
winampDsp->handle = ++winampDSPhandle;
Delphi-Quellcode:
Denke wieder daran, dass ich mich mit den Bezeichner auf den C++ Code beziehe und du diese Namen in Delphi abwandeln musst.
// durch den vorangestellten Operator ++ zuerst erhöhen:
Inc(winampDSPhandle); // dann zuweisen: winampDsp^.handle := winampDSPhandle; Grüße marabu |
Re: Dynamisches Array oder Klasse als Array auslegen
Zitat:
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:
Erst dadurch war es mir möglich die Module richtig einzulesen.
pGetMod : function : pointer; stdcall;
pGetMod := GetProcAddress(winampDsp^.hDll, 'winampDSPGetHeader2'); Für euch mag das selbstverständlich sein .. aber bei mir mit nicht so viel wissen was Delphi angeht war das schon ein fortschritt. :wink: Kannst vielleicht mal über diese Funktion schauen? Da stimmt irgendetwas mit den IF abfrageverbund nicht Fehler! Zitat:
Delphi-Quellcode:
GRüße
// 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; |
Re: Dynamisches Array oder Klasse als Array auslegen
Um dem Compiler Entwarnung zu geben: Nimm die Zuweisung von 0 an Result aus dem äußeren ELSE-Zweig weg und stelle sie ohne Bedingung vor das IF Statement.
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 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