AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Dynamisches Array oder Klasse als Array auslegen
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Array oder Klasse als Array auslegen

Ein Thema von EWeiss · begonnen am 22. Sep 2006 · letzter Beitrag vom 30. Sep 2006
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#21

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 24. Sep 2006, 10:34
Zitat von marabu:
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
Sorry verstehe ich jetzt nicht!

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.

grüße
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#22

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 24. Sep 2006, 10:39
Schau mal:

Delphi-Quellcode:
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;
Verständlicher so?

marabu
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#23

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 24. Sep 2006, 10:45
Zitat von marabu:
Schau mal:

Delphi-Quellcode:
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;
Verständlicher so?

marabu
Verstanden ja
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 ..
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#24

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 24. Sep 2006, 10:52
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#25

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 24. Sep 2006, 10:56
Zitat von marabu:
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
Ja das stimmt Sorry

gruß
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#26

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 25. Sep 2006, 10:13
Irgendwie bekomme ich das nicht gebacken.

Delphi-Quellcode:
// 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;
In BASS_WADSP_Load und AddDSP klappt jetzt alles bis in der obigen GetName funktion
wenn ich von dort aus in winampDsp := GetDSP(plugin); springe

Delphi-Quellcode:
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;
werden mir bei der ausgabe Result := winampDsp; komplett andere Werte angegeben
so als wenn die letzen aufrufe nicht mehr existieren würden.


gruß
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#27

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 25. Sep 2006, 13:45
Niemand ne Idee ?
Schade...

gruß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#28

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 25. Sep 2006, 14:08
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#29

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 25. Sep 2006, 17:44
Zitat von marabu:
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
In BASS_WADSP_Load nach AddDSP wenn das Result übergeben wurde habe
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ß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#30

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 25. Sep 2006, 17:59
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:
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;
Gruß

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.
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