Typen zur Verwendung in Librarys

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Typen zur Verwendung in Librarys

Beitrag von theo »

Diesen Fall gibt es natürlich, das grenzt für mich aber schon an Missbrauch der TStringList.
Das hält auch anderen Betrachtungen nicht Stand. z.B.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var sl:TStringList;
begin
 sl:=TStringList.create;
 sl.Add('eins'+LineEnding+'zwei'+LineEnding+'drei');
 Caption:=inttostr(sl.Count); //->1
 Memo1.Lines.Assign(sl);
 Caption:=Caption+' '+Inttostr(Memo1.Lines.Count); //->3  
 sl.free;
end;

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Typen zur Verwendung in Librarys

Beitrag von Hitman »

theo hat geschrieben:Diesen Fall gibt es natürlich, das grenzt für mich aber schon an Missbrauch der TStringList.
Das hält auch anderen Betrachtungen nicht Stand. z.B.
Aber genau darum ging es doch, dass TStringList (um marcov's Worte zu benutzen) Limitierungen einführt, die eigentlich unnötig sind. In einem array of string können eben die einzelnen Strings Zeilenumbrüche enthalten. Über eine TStringList geht das dann verloren. (genau darum hab ich vorhin das Beispiel auch so gewählt)

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Typen zur Verwendung in Librarys

Beitrag von theo »

Hitman hat geschrieben:
theo hat geschrieben:Diesen Fall gibt es natürlich, das grenzt für mich aber schon an Missbrauch der TStringList.
Das hält auch anderen Betrachtungen nicht Stand. z.B.
Aber genau darum ging es doch, dass TStringList (um marcov's Worte zu benutzen) Limitierungen einführt, die eigentlich unnötig sind. In einem array of string können eben die einzelnen Strings Zeilenumbrüche enthalten. Über eine TStringList geht das dann verloren. (genau darum hab ich vorhin das Beispiel auch so gewählt)
So stimmt das nicht. Du kannst einem TStringList Item durchaus LineEndings speichern, genau wie bei array of string.
Aber wenn du das als Text abholst, sind da nachher mehr Zeilen. Bei sl gehen die LineEndings aber nicht verloren.

Ihr habt ja recht, wenn man davon ausgeht, dass ein Item Text mit LineEndings enthalten soll.

Ich finde die generelle Warnung aber übertrieben. Mann muss einfach wissen, womit man es zu tun hat.
Ich hätte keine Probleme, z.B. eine Liste von Font.Names etc. als TStringList.Text zu übergeben.
Genauso könnte man davor warnen, LineEndings in Items zu speichern, da passiert im Austausch mit Memo.Lines dasselbe.
Man muss halt wissen was man tut. ;-)

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Typen zur Verwendung in Librarys

Beitrag von RSE »

Gibt es einen programmiersprachenübergreifenden und betriebssystemunabhängigen Ersatz für TFont für die Verwendung als Parameter in einem Library-Interface? Ansonsten müsste ich Größe, Schriftart, Farbe etc. alles einzeln abfragen... Der Ersatztyp soll natürlich automatisch in TFont umgewandelt werden können. 8)
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Typen zur Verwendung in Librarys

Beitrag von theo »

RSE hat geschrieben:Gibt es einen programmiersprachenübergreifenden und betriebssystemunabhängigen Ersatz für TFont für die Verwendung als Parameter in einem Library-Interface?
Träum weiter.... ;-)

Sowas würde ich u.U. mit XML oder JSON als PChar austauschen.

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Typen zur Verwendung in Librarys

Beitrag von RSE »

theo hat geschrieben:Träum weiter.... ;-)
Hab ich mir schon gedacht. :| Also doch alles einzeln...
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Typen zur Verwendung in Librarys

Beitrag von theo »

Am standardisiertesten wäre evtl. noch die CSS Notation.

Beispiele Font
{ font:bold .9em Times; }
{ font:italic 1cm Helvetica; }
{ font:small-caps 110% Verdana; }
{ font:2em/180% Courier; }

Oder einzelne Attribute:

font-family (Schriftart)
font-style (Schriftstil)
font-variant (Schriftvariante)
font-size (Schriftgröße)
font-weight (Schriftgewicht)

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Typen zur Verwendung in Librarys

Beitrag von RSE »

CSS kenne ich, aber das müsste ich auch wieder nur erst parsen, da kann ich auch einzelne Parameter übergeben. Ist ja kein Beinbruch. ;-)
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Typen zur Verwendung in Librarys

Beitrag von theo »

RSE hat geschrieben:CSS kenne ich, aber das müsste ich auch wieder nur erst parsen, da kann ich auch einzelne Parameter übergeben. Ist ja kein Beinbruch. ;-)
Ja klar, kommt halt auf den gewünschten Standardisierungsgrad an.
Ich meine nur, wenn du das möglichst für alle Systeme / Compiler machen willst, und nicht dein eigenes Format "erklären" willst, wäre es eine Möglichkeit. Du sagst dann einfach:
"Die Funktion exportiert Font-informationen im CSS Font Format."

z.B. afaik trennt nicht jedes System Font.height und Font.size als zwei separate Parameter.
In CSS entspricht das px vs pt.

Standard ist immer gut. ;-)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: array of string wie für library umbauen?

Beitrag von mschnell »

RSE hat geschrieben:Was sind "log string"?
Sorry: "Long String"

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Typen zur Verwendung in Librarys

Beitrag von mschnell »

RSE hat geschrieben:Wie stellt man in Librarys sicher, dass die andere Aufrufkonvention (z.B. stdcall) auch bei Events Anwendung findet?
In C musst Du das alles von Hand machen, sonst nimmt der Compiler den Default. Es stehen Keywords für verschiedene Aufruf-Konventionen zur Wahl (u.A. auch "Pascal", was nicht FPC, sondern GNU Pascal meint. Die Keywords hab ich aber nicht im Kopf.)
-Michael

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Typen zur Verwendung in Librarys

Beitrag von RSE »

mschnell hat geschrieben:
RSE hat geschrieben:Wie stellt man in Librarys sicher, dass die andere Aufrufkonvention (z.B. stdcall) auch bei Events Anwendung findet?
In C musst Du das alles von Hand machen, sonst nimmt der Compiler den Default. Es stehen Keywords für verschiedene Aufruf-Konventionen zur Wahl (u.A. auch "Pascal", was nicht FPC, sondern GNU Pascal meint. Die Keywords hab ich aber nicht im Kopf.)
-Michael
Öhm, das ist nicht was ich meinte... war aber auch nicht präzise genug gestellt, meine Frage. Mein Interface hat einen Event OnLog vom Typ TLogEvt. TLogEvt ist ebenfalls im Interface definiert und zeigt so den Prozedurkopf incl. der Aufrufkonvention. Da ich diesen Typ für eine Variable verwende, die ich mit der Adresse einer Prozedur belege, die mit dem Typ TLogEvt übereinstimmt, muss diese ja auch die entsprechende Aufrufkonvention haben. Auf der Aufrufenden Seite ist der Typ TLogEvt natürlich auch bekannt. So ist die Einhaltung auf beiden Seiten also sichergestellt. Ich weiß irgendwie gar nicht mehr, wie mir die Frage aufgekommen ist... War wohl zu viel relativ neues auf einmal...
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Typen zur Verwendung in Librarys

Beitrag von mschnell »

Ich habe vor ein paar Monaten 'mal (testhaber) eine GNU-C-DLL mit einer Funktion gemacht, die von einem Delphi-Programm aufgerufen wurde, das im Aufruf ein eine Referenz auf eine (Delphi-) Prozedur übergeben hat, die die in der C-Funktion dann aufgerufen wurde.

Meinst Du so was ?

Das hat jedenfalls auf Anhieb geklappt. Als SAufrufkonvention habe ich STDCALL verwendet Heißt in GNU_C, glaube ich "__STDCALL__" oder so ähnlich.

Ich kann 'mal schauen, ob ich den Sourcecode irgendwo finde.

-Michael

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Re: Typen zur Verwendung in Librarys

Beitrag von RSE »

Also ich hab mir meine Frage oben selbst beantwortet :mrgreen: Die war wohl blos entstanden, weil mir der Kopf vor neuen Sachen geraucht hat.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Antworten