![]() |
Delphi-Version: 2010
Aufruf von Funktion mit Parametern aus PChar: Missverstehe leider Speichermanagement
Hallo.
Ich möchte folgende Funktion benutzen:
Delphi-Quellcode:
Nun habe ich gelesen (
function TBASSPlayer.GetLyrics(Artist, Title : string; CheckTitleMatch : boolean;
var pLyrics : pchar; var lLyrics : integer) : boolean; ![]()
Delphi-Quellcode:
Leider bricht schon bei der ersten Zeile der Compiler ab.var plyrics : pchar; ilyrics : integer; begin //Hole mir ilyrics um Länge des Strings festzustellen spieler.BassPlayer1.GetLyrics(id3info.Artist,id3info.Titel,false,nil,Ilyrics); //Reserviere den Speicher GetMem(plyrics,ilyrics+1); //Hole mir die Lyrics spieler.BassPlayer1.GetLyrics(id3info.Artist,id3info.Titel,false,plyrics,ilyrics); showmessage(string(plyrics)); Zitat:
Artist und Titel sind natürlich strings. Ist nil kein Pchar kompatibler "Datentyp"? Ist bestimmt einfach, verstehe es leider noch nicht. Danke. |
AW: Aufruf von Funktion mit Parametern aus PChar: Missverstehe leider Speichermanagem
Zitat:
Lösung: Eine Variable übergeben. |
AW: Aufruf von Funktion mit Parametern aus PChar: Missverstehe leider Speichermanagem
Hm, wenn ich aber einen leeren PChar übergebe, beschwert er sich auch mit einer Exception:
--------------------------- --------------------------- Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000. --------------------------- OK --------------------------- |
AW: Aufruf von Funktion mit Parametern aus PChar: Missverstehe leider Speichermanagem
Was meinst du mit leeren PChar?
(PChar('') oder Nil) |
AW: Aufruf von Funktion mit Parametern aus PChar: Missverstehe leider Speichermanagem
Delphi 2010 und Bass.DLL? Hast du denn ein Unicodefähige Bass-DLL?
Falls nein sind alle Funktiondefinitionen von PChar auf PAnsiChar zu ändern! |
AW: Aufruf von Funktion mit Parametern aus PChar: Missverstehe leider Speichermanagem
Soeine Abfrage nur, wenn die Prozedur auch dafür vorgesehn ist.
Oftmals geht sowas nicht und man muß entweder die nötige Länge über eine andere Funktion (ala GetLyricsLength o.Ä.) auslesen und bei Anderen muß man die Variable auf eine bestimmte maximal zu erwartende Länge vorbelegen und danach dann kürzen. Und nur manchmal kann man es ala
Delphi-Quellcode:
machen.
procedure TheProc(data: PChar: len: Integer): Integer;
i := TheProc(nil, 0); P := GetMem(i); TheProc(P, i); Du aber übergibst einfach so NIL, und in ilyrics einfach so irgendeinen unbestimmten/zufälligen Wert. Ich würde es also erstmal so probieren:
Delphi-Quellcode:
plyrics := nil;
ilyrics := 0; spieler.BassPlayer1.GetLyrics(id3info.Artist,id3info.Titel,false,plyrics,Ilyrics); GetMem(plyrics,ilyrics+1); spieler.BassPlayer1.GetLyrics(id3info.Artist,id3info.Titel,false,plyrics,ilyrics); FreeMem(plyrics); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 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