Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringlist leert sich Selbst! (https://www.delphipraxis.net/166966-tstringlist-leert-sich-selbst.html)

TiGü 8. Mär 2012 08:32

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von danu1104 (Beitrag 1155315)
unter var deklariere ich die stringlisten create sie dort wo sie gebraucht werden und schliesse sie am ende der Function wieder. Deswegen kann ich den fehler nicht nachvollziehen. Ich habe nur diese 2 - 3 Stringlisten, und ich habe noch nie diesen fehler gehabt, seit ich mit delphi arbeite ....

Wenn man Beiträge dreimal Lesen muss, damit man etwas versteht, fehlt es an allen grundlegenen Kenntnissen der deutschen Rechtschreibung! :shock:

Die Lösung wurde im vierten Post in diesen Thread genannt.

danu1104 8. Mär 2012 08:43

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1155317)
Böses böses Speichern unter C:\.

Win Vista/7 wird das verhindern (Keine Schreibzugriff) bzw. in den Virtuellen Store Umschieben so das du deine Änderungen im Windows Explorer unter C:\ nicht sieht.

System Festplate ist I:\ , c:\ ist meine backup platte

danu1104 8. Mär 2012 08:49

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von TiGü (Beitrag 1155319)
Zitat:

Zitat von danu1104 (Beitrag 1155315)
unter var deklariere ich die stringlisten create sie dort wo sie gebraucht werden und schliesse sie am ende der Function wieder. Deswegen kann ich den fehler nicht nachvollziehen. Ich habe nur diese 2 - 3 Stringlisten, und ich habe noch nie diesen fehler gehabt, seit ich mit delphi arbeite ....

Wenn man Beiträge dreimal Lesen muss, damit man etwas versteht, fehlt es an allen grundlegenen Kenntnissen der deutschen Rechtschreibung! :shock:

Die Lösung wurde im vierten Post in diesen Thread genannt.

Schwachsinn, ob ich es so mache: [ic+1] oder nicht es bleibt das gleiche. Zumal ist der fehler aufgetretten, bevor ich diese Function geschrieben habe.

Wenn du nur über meiner Rechtschreibung dir deinen Kopf zerbrichst , dann lass mich bitte selber den fehler finden, und werde Deutsch Lehrer.

Lemmy 8. Mär 2012 08:51

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von danu1104 (Beitrag 1155315)

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?

jaenicke 8. Mär 2012 08:59

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von Klaus01 (Beitrag 1155318)
Ich würde die StringList auch als Parameter übergeben.

Aber sinnvoller wäre das nicht als var-Parameter zu machen. Schließlich übergibst du dann einen Pointer auf einen Pointer, da die TStringList ja schon selbst ein Pointer auf das Objekt ist.

danu1104 8. Mär 2012 08:59

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von Lemmy (Beitrag 1155323)
Zitat:

Zitat von danu1104 (Beitrag 1155315)

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

Lemmy 8. Mär 2012 09:06

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von danu1104 (Beitrag 1155326)
Debugger? Also es handel sich um eine DLL ,

ist kein Grund den Debugger nicht auch anzuwerfen - entweder du verwendest "Mit Prozess verbinden" oder du schneidest die Funktion aus der DLL und fügst die in ein leeres Projekt rein, dann kannst Du da debuggen und wenn das Teil läuft kannst Du die Funktion wieder in die DLL packen.

Sinnvoller weise packst Du die Funktion eh in eine eigene Unit, die kannst Du dann zum weiterentwickeln / debuggen in ein normales Projekt einbinden und wenn sie läuft über das DLL Projekt als DLL zur Verfügung stellen.

GRüße

danu1104 8. Mär 2012 09:11

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von Lemmy (Beitrag 1155328)
Zitat:

Zitat von danu1104 (Beitrag 1155326)
Debugger? Also es handel sich um eine DLL ,

ist kein Grund den Debugger nicht auch anzuwerfen - entweder du verwendest "Mit Prozess verbinden" oder du schneidest die Funktion aus der DLL und fügst die in ein leeres Projekt rein, dann kannst Du da debuggen und wenn das Teil läuft kannst Du die Funktion wieder in die DLL packen.

Sinnvoller weise packst Du die Funktion eh in eine eigene Unit, die kannst Du dann zum weiterentwickeln / debuggen in ein normales Projekt einbinden und wenn sie läuft über das DLL Projekt als DLL zur Verfügung stellen.

GRüße

schau mal den beitrag über dir, habe code hinzugefügt

himitsu 8. Mär 2012 09:15

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von Klaus01 (Beitrag 1155318)
.. wo kommt denn diese Funktion zum Einsatz?

Ich würde die StringList auch als Parameter übergeben.

Delphi-Quellcode:
function getvarval(var myStringList: TStringList;str:Pchar):Pchar;

Es geht um eine DLL-Funktion.

Solange er nicht mit Laufzeitpackages kompiliert, würde ich davon eher abraten, Objekte über RTTI-Grenzen hinweg zu übergeben.

Bernhard Geyer 8. Mär 2012 09:23

AW: TStringlist leert sich Selbst!
 
Zitat:

Zitat von danu1104 (Beitrag 1155321)
System Festplate ist I:\ , c:\ ist meine backup platte

Und wie hast du das hin bekommen?
Ab Vista sorgt doch der Installer von Windows dafür das für Windows die Systemplatte immer C:\ ist egal welche Partition/Platte es physikalisch ist :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz