AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist leert sich Selbst!

Ein Thema von danu1104 · begonnen am 7. Mär 2012 · letzter Beitrag vom 8. Mär 2012
Antwort Antwort
Seite 2 von 3     12 3      
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 09:32
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!

Die Lösung wurde im vierten Post in diesen Thread genannt.
  Mit Zitat antworten Zitat
danu1104

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

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 09:43
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
Daniel
  Mit Zitat antworten Zitat
danu1104

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

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 09:49
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!

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.
Daniel
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 09:51

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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 09:59
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
danu1104

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

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 09: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 10:12 Uhr) Grund: Code hinzugefügt
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 10:06
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
  Mit Zitat antworten Zitat
danu1104

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

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 10:11
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
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 10:15
.. wo kommt denn diese Funktion zum Einsatz?

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

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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: TStringlist leert sich Selbst!

  Alt 8. Mär 2012, 10:23
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:35 Uhr.
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