Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dynamisches Array oder Klasse als Array auslegen (https://www.delphipraxis.net/77666-dynamisches-array-oder-klasse-als-array-auslegen.html)

marabu 23. Sep 2006 17:52

Re: Dynamisches Array oder Klasse als Array auslegen
 
Eher so:

Delphi-Quellcode:
begin
  DspPtrArray := gWinampDSP; // natürlich die globale Variable !!
  // ...
end;
Ich weiß nicht wie du den Namenskonflikt aufgelöst hast.

Zitat:

Zitat von EWeiss
kann ich hier im Thread weiter machen oder muss ich für jede Frage einen neuen aufmachen?

Ich persönlich glaube, dass eine Abtrennung momentan keinen Sinn macht, da sich momentan alles um die Portierung einer bestimmten Prozedur dreht. Sobald du das Gefühl hast den Schwerpunkt des Themas zu verlagern mache einen neuen thread auf.

Grüße

marabu

EWeiss 23. Sep 2006 18:20

Re: Dynamisches Array oder Klasse als Array auslegen
 
Delphi-Quellcode:
begin
  DspPtrArray := gWinampDSP; // natürlich die globale Variable !! 
  // ...
end;
Verstehe ich jetzt nicht.
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:
implementation

var
 winampDSPcounter : DWORD   = 0;
 winampDSPhandle : DWORD   = 0;
 PlayState       : DWORD;
 DspPtrArray     : PDspPtrArray = nil;
 winampDSP       : PWinampDSPInfo;
 pGetMod         : PWinampDSPHeader;
gruß

marabu 23. Sep 2006 18:37

Re: Dynamisches Array oder Klasse als Array auslegen
 
Du hattest in deinem Eröffnungsbeitrag aus dem C++ Code zitiert:

Code:
WINAMPPLUGINPROPDSP **winampDSP = NULL;
Wenn du den Namen für deine globale Variable in Object Pascal beibehalten willst, dann so:

Delphi-Quellcode:
var
  winampDSP: PPWinAmpPluginPropDSP; // siehe Beitrag #2
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:

Delphi-Quellcode:
procedure AddDSP(dsp: PWinampDSPInfo);
var
  a: DWORD;
begin
  DspPtrArray := winampDSP;
  // ...
  DspPtrArray^[a] := dsp;
marabu

EWeiss 23. Sep 2006 18:45

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ß

marabu 23. Sep 2006 19:39

Re: Dynamisches Array oder Klasse als Array auslegen
 
Zitat:

Zitat von EWeiss
Dürfte ich dir den aktuellen stand( Quelltext) zuschicken?

Wenn du den Quelltext nur mir zuschickst, dann übst du moralischen Druck auf mich aus und ich muss dich vielleicht trotzdem enttäuschen. Stelle den Quelltext doch in diesen thread ein - dann können dir auch andere helfen, falls ich überraschend verscheide oder meine Frau mir mit dem Baseballschläger den Zugang zum PC verwehrt. Ist das ein deal?

Freundliche Grüße

marabu

PS: So ein fortschrittliches Seniorenheim - mit Internetzugang ...

EWeiss 23. Sep 2006 20:20

Re: Dynamisches Array oder Klasse als Array auslegen
 
Zitat:

Zitat von marabu
Zitat:

Zitat von EWeiss
Dürfte ich dir den aktuellen stand( Quelltext) zuschicken?

Wenn du den Quelltext nur mir zuschickst, dann übst du moralischen Druck auf mich aus und ich muss dich vielleicht trotzdem enttäuschen. Stelle den Quelltext doch in diesen thread ein - dann können dir auch andere helfen, falls ich überraschend verscheide oder meine Frau mir mit dem Baseballschläger den Zugang zum PC verwehrt. Ist das ein deal?

Freundliche Grüße

marabu

PS: So ein fortschrittliches Seniorenheim - mit Internetzugang ...

Wäre kein Problem was den Delphi Quelltext angeht.
Beim C++ Quelltext sieht das anders aus.

Muss mich erst informieren ob ich das darf.. Will den Author nicht übergehen ;)

Auch Freundliche grüße.

EWeiss 24. Sep 2006 08:18

Re: Dynamisches Array oder Klasse als Array auslegen
 
Bin immer noch in der procedure

Delphi-Quellcode:
procedure AddDSP(winampDsp: WINAMPPLUGINPROPDSP); stdcall;
dort befindet sich im Original die Zeile
Code:
winampDsp->handle = ++winampDSPhandle;
Habe gelesen das ++ das gleiche sein soll wie Inc()

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ß ,..

marabu 24. Sep 2006 09:13

Re: Dynamisches Array oder Klasse als Array auslegen
 
Guten Morgen.

Code:
winampDsp->handle = ++winampDSPhandle;
Das entspricht:

Delphi-Quellcode:
// durch den vorangestellten Operator ++ zuerst erhöhen:
Inc(winampDSPhandle);
// dann zuweisen:
winampDsp^.handle := winampDSPhandle;
Denke wieder daran, dass ich mich mit den Bezeichner auf den C++ Code beziehe und du diese Namen in Delphi abwandeln musst.

Grüße

marabu

EWeiss 24. Sep 2006 10:18

Re: Dynamisches Array oder Klasse als Array auslegen
 
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. :wink:

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

marabu 24. Sep 2006 10:28

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 12:50 Uhr.
Seite 2 von 6     12 34     Letzte »    

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