AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [BASS DLL] Callbackfunktion darf kein Methodenzeiger sein?
Thema durchsuchen
Ansicht
Themen-Optionen

[BASS DLL] Callbackfunktion darf kein Methodenzeiger sein?

Ein Thema von Mithrandir · begonnen am 20. Okt 2009 · letzter Beitrag vom 20. Okt 2009
 
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

[BASS DLL] Callbackfunktion darf kein Methodenzeiger sein?

  Alt 20. Okt 2009, 17:44
Hi ihr,

ich habe gerade folgendes Problem, an dem ich nicht weiter komme: Ich möchte mit der BASS.DLL innerhalb einer Klasse einen Internetstream wiedergeben. Über die ChannelSetSync-Funktion der BASS.DLL möchte ich bei neuen Meta-Daten die Anzeige aktualisieren lassen. Dafür brauche ich einen Callback-Funktion. Die Deklaration dieser Funktion habe ich aus dem Delphi-Beispiel entnommen, das bei der BASS-Lib mitgeliefert wird.

Die Funktion InternetStreamMeta hat als Aufrufkonvention "stdcall;" bekommen, so wie es das Beispiel auch macht. Hier mein Code:

Internet-Stream abspielen
Delphi-Quellcode:
procedure TMediaClass.RunInternetStream(StreamURL: String);
begin
  if StreamURL <> 'then
  begin
    if fCurrentStream <> 0 then
      BASS_StreamFree(fCurrentStream);
    fCurrentStream := BASS_StreamCreateURL(PChar(StreamURL), 0, BASS_STREAM_BLOCK or BASS_STREAM_AUTOFREE, nil, nil);
    BASS_ChannelSetSync(fCurrentStream, BASS_SYNC_META, 0, @TMediaClass.InternetStreamMeta, nil);
    Play;
  end;

end;
Callback-Funktion für Metadaten
Delphi-Quellcode:
procedure TMediaClass.DoMeta;
var
  p: Integer;
  meta: PChar;
begin
  meta := BASS_ChannelGetTags(fCurrentStream, BASS_TAG_META);
  if (meta <> nil) then
  begin
    p := Pos('StreamTitle=', meta);
    if (p = 0) then
      Exit;
    p := p + 13;
    fCurrentMediaItem.Title := String(Pchar(Copy(meta, p, Pos(';', meta) - p - 1)));
  end;
end;

procedure TMediaClass.InternetStreamMeta(handle: HSYNC; channel, data, user: DWORD); stdcall;
begin
  DoMeta;
end;
Kommt es nun zum Wechsel der MetaDaten, erscheint folgende, für mich überaus hilfreiche Meldung:

Zitat:
---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
In Projekt C:\Users\Daniel\Documents\Borland Studio-Projekte\SmallTune\bin\smalltune.exe trat ein Problem mit folgender Meldung auf: 'access violation at 0x0040e466: read of address 0xd0000012'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK
---------------------------
Danach hängt das Programm in dieser Zeile fest:

meta := BASS_ChannelGetTags(fCurrentStream, BASS_TAG_META); Springe ich mit F8 weiter, lande ich wieder an dieser Stelle.

Hat jemand Erfahrung damit, oder sieht, was ich hier falsch mache?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
 


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 21:08 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 by Thomas Breitkreuz