CharUpperBuff()

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Groffy
Beiträge: 50
Registriert: Fr 23. Nov 2012, 13:27
OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
CPU-Target: 32/64Bit

CharUpperBuff()

Beitrag von Groffy »

Hallo,

eine Frage an die Leute die mit der FPC trunk Version arbeiten. Ist diese Funktion in der trunk Version? In FPC 2.6.2 gibt es sie nicht. Hab die winapi.inc jetzt selbst erweitert. Ein CharLowerBuff() gibt es in der FPC 2.6.2, da war der Weg zu einer CharUpperBuf() nicht weit...


Beste Grüße

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

Re: CharUpperBuff()

Beitrag von theo »

Nur mal so um Missverständnisse zu vermeiden: Du benötigst eine Nicht-Unicode fähiges Uppercase, welches mit PChar arbeitet?

Groffy
Beiträge: 50
Registriert: Fr 23. Nov 2012, 13:27
OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
CPU-Target: 32/64Bit

Re: CharUpperBuff()

Beitrag von Groffy »

Es wird in der aktuellen trunk Version der IBObjects eingesetzt. Beim parsen von SQL Statements kommen in der Regel wohl keine Unicode Zeichen vor. Der Entwickler der Lazarus/FPC Portierung arbeitet (leider) mit der FPC trunk Version, woraus resultiert, dass ich ab und zu die packages nicht kompiliert bekomme.

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

Re: CharUpperBuff()

Beitrag von theo »

Ich habe die FPC Version vom 31.03.2013, und dort gibt es das nicht.
Das kann man auch hier kontrollieren:
http://svn.freepascal.org/cgi-bin/viewv ... xt%2Fplain

Wahrscheinlich nicht benötigt, da für Parser ein lowercase ausreicht.

Groffy
Beiträge: 50
Registriert: Fr 23. Nov 2012, 13:27
OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
CPU-Target: 32/64Bit

Re: CharUpperBuff()

Beitrag von Groffy »

Hm, wird in einer Hilfsfunktion mit Namen

procedure NonLitsUpperCase( var AStr: string )

benötigt. Anhand des Prozedurnamens vermute ich mal das tatsächlich ein UpperCase benötigt wird. Der Interbase/Firebird Datenbankserver will bestimmte Sachen (z.B. Feldnamen, Tabellennamen etc.) in Großbuchstaben haben sonst müssen diese Dinge in Anführungsstrichen gesetzt werden.

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

Re: CharUpperBuff()

Beitrag von theo »

Groffy hat geschrieben:Hm, wird in einer Hilfsfunktion mit Namen

procedure NonLitsUpperCase( var AStr: string )

benötigt. Anhand des Prozedurnamens vermute ich mal das tatsächlich ein UpperCase benötigt wird. Der Interbase/Firebird Datenbankserver will bestimmte Sachen (z.B. Feldnamen, Tabellennamen etc.) in Großbuchstaben haben sonst müssen diese Dinge in Anführungsstrichen gesetzt werden.
Lässt sich praktisch durch ein einfaches Uppercase ersetzen, oder nicht?

Groffy
Beiträge: 50
Registriert: Fr 23. Nov 2012, 13:27
OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
CPU-Target: 32/64Bit

Re: CharUpperBuff()

Beitrag von Groffy »

Sicherlich :-)

Die Zeile

CharUpperBuff( @ch, 1 );

hätte einfach nur durch ein

ch:= CharUpper( ch );

ersetzt werden müssen...

Ich war trotzdem neugierig wieso diese Prozedur im Sourcecode stand. In ascdef.inc ist diese Funktion tatsächlich deklariert. Als external in user32.dll. Das dürfte für die Win Platformen relevant sein, ist die Frage wieso die nicht gefunden wird...

function CharUpperBuff(lpsz:LPSTR; cchLength:DWORD):DWORD; external 'user32' name 'CharUpperBuffA';

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

Re: CharUpperBuff()

Beitrag von theo »

Also mit

Code: Alles auswählen

uses windows;  
geht's schon, oder? Ist halt nicht X-Plattform.

Groffy
Beiträge: 50
Registriert: Fr 23. Nov 2012, 13:27
OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
CPU-Target: 32/64Bit

Re: CharUpperBuff()

Beitrag von Groffy »

Gute Frage, ich bin davon ausgegangen. Die visuellen Controls laufen auch mit dem QT Widgets Set. Allerdings habe ich das alles nur auf Win XP / Win7 Systemen laufen, was ja nicht wirklich aussagekräftig bezüglich der Portabilität ist. Ich bin bislang davon ausgegangen, dass das Lazarus Konzept an sich Multiplatform ist. D.h. es gibt einen Abstraktionslayer der auf nicht Windows Systemen die Funktionen entsprechend zur Verfügung stellt. Ich hatte mal einen Blick in die cross platform Nachbildung des Windows messaging Systems geworfen (unit LMessages). Mit dem direkten einbinden der unit windows hebelt man das also aus?

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

Re: CharUpperBuff()

Beitrag von theo »

Groffy hat geschrieben:t. D.h. es gibt einen Abstraktionslayer der auf nicht Windows Systemen die Funktionen entsprechend zur Verfügung stellt.
Ist auch so. Deshalb wird
CharLowerBuff()
per
uses LCLIntf;
plattformunabhängig angeboten. Nur CharUpperBuff() steht aus irgendwelchen Gründen nicht plattformunabhängig zur Verfügung.
Wahrscheinlich wurde es bisher nicht vermisst.

Groffy
Beiträge: 50
Registriert: Fr 23. Nov 2012, 13:27
OS, Lazarus, FPC: Win10/Linux Mint - Lazarus 2.2/trunk
CPU-Target: 32/64Bit

Re: CharUpperBuff()

Beitrag von Groffy »

theo hat geschrieben: Nur CharUpperBuff() steht aus irgendwelchen Gründen nicht plattformunabhängig zur Verfügung.
Wahrscheinlich wurde es bisher nicht vermisst.
Jetzt schon :

Revision 42580 : LCL: Implement CharUpperBuff function. Issue #24493, patch from Stephano

Antworten