entfernt , und das Resultat ist das die listen jetzt voll bleiben (juhuu) , doch habe ich den EStringlistError der mir die App immer crasht.
Aus der Delphi-Hilfe:
Zitat:
EStringListError wird ausgelöst, wenn eine Anwendung versucht, mit einem ungültigen Index auf ein Listenfeld zuzugreifen, um beispielsweise einen Eintrag hinzuzufügen.
hast Du schon mal den Debugger angeworfen und geschaut WO, d.h. in welcher Zeile die
Exception geworfen wird?
Debugger? Also es handel sich um eine
DLL , die function exportiere ich mit stdcall und rufe sie in einer Consolen - APP auf, das lief bislang wunderbar, bis ich gestern Delphi geöffnet habe um am Project weiter zu knibbeln, nach dem Build der
DLL kiamm dann das 1. mal der EStringlistError, wobei ich garnix getan habe.
Habe erst gedacht es wer ein Ressource Problem und habe deswegen *.res entfernt was jedoch nix bewirkte. Daraufhin habe ich alle String Variablen in Pchar umgeschrieben, auch keine lösung. Alle Stringlisten global deklariert, auch nicht.
hier die function:
Delphi-Quellcode:
function scripting(cmd:Pchar):Pchar; STDCALL;
Var
p:pchar;
ist:tfilestream;
begin
if Length(CMD) < 1 then
begin
Exit;
end;
//global
Op:=TStringlist.Create;
Op.Delimiter:=' ';
Op.DelimitedText:=CMD;
//global
VarValue:=TStringlist.Create;
//global
gvarname:=TStringlist.Create;
gvarname.Delimiter:='.';
gvarname.DelimitedText:=CMD;
P:=Pchar(ExtractFilePath(Paramstr(0)));
if gvarname.Strings[0] = 'global' then
begin
varvalue.Add(gvarname.Strings[1]);
end;
if Op.Strings[0] = 'sound_init' then
begin
win:=0;
if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
begin
MessageBox(0, 'An incorrect version of BASS.DLL was loaded', nil, MB_ICONERROR);
Exit;
end;
if (not BASS_Init(-1, 44100, 0,win, nil)) then
begin
Exit;
end;
end else
if Op.Strings[0] = 'sound_file' then
begin
if Op.Strings[1] = getvarval(varvalue,Pchar(Op.Strings[1])) then
// strs := BASS_StreamCreateFile(False, Pchar(getvarval(varvalue,Pchar(Op.Strings[1]))), 0, 0, 0)
else
strs := BASS_StreamCreateFile(False, Pchar(Op.Strings[1]), 0, 0, 0);
end else
if Op.Strings[0] = 'sound_play' then
begin
BASS_ChannelPlay(strs, False);
end else
if (Op.Strings[0] = '__run') then
if not (Op.Strings[1] = 'while.playing') then
Delay(StrToInt(Op.Strings[1]))
else begin
repeat
Delay(1)
until
BASS_ChannelIsActive(strs)= BASS_ACTIVE_STOPPED
end;
if (Op.Strings[1] = 'while.taskkill') then
repeat
Delay(1)
until false
else
if Op.Strings[0] = 'sound_stop' then
begin
BASS_ChannelStop(strs);
end else
if Op.Strings[0] = 'end' then
begin
Application.Terminate;
Exit;
end else
end;
script aus datei:
Zitat:
global.testvar="data\usr\local\tracks\jd.mp3"
sound_init
sound_file testvar
sound_play
__run while.playing
Und deswegen verstehe ich es nicht, das ist so übersichtlich, wie kann da solch ein fehler sein