Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#19

Re: Dynamisches Array oder Klasse als Array auslegen

  Alt 24. Sep 2006, 11:18
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
  Mit Zitat antworten Zitat