Progress API lldefinefield Codepage

Wir verwenden aktuell LL30 über API, programmieren in Progress ABL (die Applikation ist mit Progress Version 9 enstanden, läuft aber mittlerweile unter Verison 12), deshalb übergeben wir die Daten auf diese “legacy” Art
RUN LLDefineField (OUTPUT nRet, hJob, “feld1”, feld1).
RUN LLDefinefieldExt (OUTPUT nRet, hJob, “feld2”, string(feld2), {&LL_NUMERIC}, 0).
um PDFs zu erzeugen. Im Bericht sind die Felder auf Arial, Zeichensatz “westlich” eingestellt.

Intern haben wir bisher mit ANSI-Zeichensatz gearbeitet. Wir wollen aber die Applikation in Zukunft komplett auf UTF-8 umstellen - soll heißen, die Strings würden dann nicht mehr ANSI-kodiert, sondern UTF-8-kodiert übergeben.

Habe gefunden, dass man nicht die “A” sondern die “W”-Funktionen aufrufen soll.

Witzig, da in der von Combit bereitgestellten Progress-Include-Datei für die API die Einsprungpunkte mit der Ordinal und nicht dem Namen definiert werden, in der Art
PROCEDURE LlDefineField EXTERNAL “CMLL30.dll” ORDINAL 18:

Hier endlich meine Fragen:

Wenn ich jetzt mit dem Dependency Walker die entsprechenden …W-Ordinals rausfinde und in der Include ändere, klappt das dann schon oder muss ich noch mehr umstellen?

Wird überhaupt die Kodierung “UTF-8” erkannt oder muss es “UTF-16” sein? (es wird in der Doku (wenn überhaupt) nur von “UNICODE” gesprochen)

Muss ich im Bericht etwas umstellen (ist ja “westlich” als Zeichensatz drin) und wenn ja, was?

Fragen über Fragen. Ich hoffe, jemand kann mich erleuchten :wink:

Hallo Martina,

willkommen in der LL-Community :slight_smile:.

Um UTF-8 codierte Texte zu übergeben kannst du weiterhin die A-APIs verwenden (die auch im Progress-Header enthalten/referenziert sind). Du musst lediglich die Option

#define LL_OPTION_CODEPAGE             (70                  ) /* default: CP_ACP; set codepage to use for conversions. */

auf 65001 setzen, also

LlSetOption(hJob, LL_OPTION_CODEPAGE, 65001)

das sollte genügen.

Vielen Dank, hat auf Anhieb geklappt. Schade, dass es im Programming-Handbook so merkwürdig beschrieben ist. Hatte die Option gefunden, aber da steht einerseits “gilt nur für die “A”-Calls” (was in Foren meist als “ANSI”-Schnittstelle betitelt wird) und eben nicht, das es auch für die übergebenen Datenfelder der API gilt (und damit eben das “ANSI” übersteuert). Dachte, diese Option wäre nur für die Ausgabe relevant.

1 Like

Wir werden uns die Stelle in der Dokumentation mal kritisch ansehen :slightly_smiling_face:. Danke für das Feedback!