AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Alles richtig, trotzdem "Incompatible Types TString List and Integer"?
Thema durchsuchen
Ansicht
Themen-Optionen

Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

Ein Thema von pmros · begonnen am 9. Sep 2015 · letzter Beitrag vom 10. Sep 2015
Antwort Antwort
Seite 2 von 2     12   
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#11

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 9. Sep 2015, 21:24
Der Code entstand bei meinem erste Test mit DLL's. Deswegen sind da noch einige Brocken drin, die schlichtweg nicht mehr gebraucht werden, bzw. keinen Sinn ergeben.

Deswegen auch das überflüssige
Delphi-Quellcode:
Liste:=
    Liste.Add(s1);
Zitat:
Das dürfte aber nur gehen, wenn du die Sharemem.dll einbindest.
Hab ich nicht, läuft trotzdem?!
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#12

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 9. Sep 2015, 21:26
Wann, und wie, wenn überhaupt, wird die Stringliste denn wieder freigegeben?
Natürlich mit Liste.free; Steht nur leider erst seit 20 Sekunden da
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 9. Sep 2015, 21:32
Hm: http://www.delphipraxis.net/90814-ob...l-kapseln.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#14

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 9. Sep 2015, 21:38
Gerade gelesen.

Zitat:
Ein Objekt in einer DLL zu instantiieren ist problemlos. Man muss es halt nur explizit machen.
Probleme treten erst auf wenn man das Objekt an das Hauptprogramm gibt. DLL und Hauptprogramm haben separate Memorypools. Die Einbindung von ShareMem beseitigt diese Probleme.
Aber trotzdem sitze ich hier, habe kein ShareMem eingebunden und mein Hauptprogramm gibt mir anstandslos die in der DLL erzeugte Stringliste aus.

Ich lass mir das testweise in einer Messagebox ausgeben

Delphi-Quellcode:
teststring:=commands('test');
showmessage(teststring[0]+' '+teststring[1]+' '+teststring[2]);
Funktioniert.

Geändert von pmros ( 9. Sep 2015 um 21:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#15

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 9. Sep 2015, 21:38
Moin,

Daten in so eine Stringliste bekommt man durcch die verschiedensten Türen:

Liste.AddStrings(Liste, ['car', 'cat', 'dog']);
Liste.DelimitedText := 'Zeile1,Zeile2,in mehrere Zeilen';
Liste.AddStrings('Mal wieder eine neue Zeile');
Liste.Text:='Ein Text mit Zeilenumbruch geht in mehrere Zeilen';

also glatter Viertürer.

Grüße in die Runde // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#16

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 9. Sep 2015, 21:47

Liste.AddStrings(Liste, ['car', 'cat', 'dog']);
Aber
Liste.AddStrings(Liste, [s1,s2,s3]); Ergibt
[Error] Project2.dpr(23): Too many actual parameters
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 10. Sep 2015, 10:37
Gerade gelesen.

Zitat:
Ein Objekt in einer DLL zu instantiieren ist problemlos. Man muss es halt nur explizit machen.
Probleme treten erst auf wenn man das Objekt an das Hauptprogramm gibt. DLL und Hauptprogramm haben separate Memorypools. Die Einbindung von ShareMem beseitigt diese Probleme.
Aber trotzdem sitze ich hier, habe kein ShareMem eingebunden und mein Hauptprogramm gibt mir anstandslos die in der DLL erzeugte Stringliste aus.

Ich lass mir das testweise in einer Messagebox ausgeben

Delphi-Quellcode:
teststring:=commands('test');
showmessage(teststring[0]+' '+teststring[1]+' '+teststring[2]);
Funktioniert.
So lange DLL und Anwendung durch den gleichen Compiler erzeugt wurden, kann das funktionieren.
Die Methode Destroy ist "virtual" und wird somit über die Klassenreferenz des Objektes in der DLL aufgerufen.
Aber schon der Vergleich "(teststring is TStringList)" dürfte in der Anwendung "False" ergeben.

Der Stringliste dürfen auch nur einzelne String-Konstanten hinzufügt werden.
Für diese wird keine Referenzzählung und keine automatische Freigabe durchgeführt.
Wird ein String in der DLL mit dem Speichermanager der DLL erzeugt, wird bei der Freigabe unter Umständen der Speichermanager der Anwendung aufgerufen, der für diesen Speicherbereich nicht zuständig ist.
Gefährlich wäre z.B.:
Delphi-Quellcode:
 {in der DLL:}
 Liste.Add('function' + IntToStr(i));

 {in der Anwendung mit der selben Liste:}
 s := teststring[0];
 teststring.Free;
 s := ''; // <- Hier könnte es dann einen Fehler geben, da Referenzzähler des Strings auf 0 fällt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Alles richtig, trotzdem "Incompatible Types TString List and Integer"?

  Alt 10. Sep 2015, 10:56
Zitat:
So lange DLL und Anwendung durch den gleichen Compiler erzeugt wurden, kann das funktionieren.
Kann, muß aber nicht.

Der eine Compiler braucht sich nur zu denken, "oh geil, das braucht keiner, also lass ich es weg".
In dem anderen Modul (EXE/DLL) wird das aber benötigt und dann knallt es, z.B. beim Zugriff auf das Feld, bzw. auch auf alle nachfolgenden Felder.

Auch alle Prüfungen mit IS gehen dann in die Hose, da jedes Modul seine eigene RTTI hat und dann TObject (EXE) nicht das Selbe ist, wie TObject (DLL).


Laufzeitpackages sind da die einzige wirkliche Lösung.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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