Einzelnen Beitrag anzeigen

danu1104

Registriert seit: 4. Dez 2006
75 Beiträge
 
Delphi 2006 Personal
 
#16

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 08:59

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] = 'globalthen
  begin
    varvalue.Add(gvarname.Strings[1]);
  end;


  if Op.Strings[0] = 'sound_initthen
  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_filethen
  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_playthen
  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_stopthen
  begin
   BASS_ChannelStop(strs);
  end else
  if Op.Strings[0] = 'endthen
  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
Daniel

Geändert von danu1104 ( 8. Mär 2012 um 09:12 Uhr) Grund: Code hinzugefügt
  Mit Zitat antworten Zitat