Ich nutze die Komponente TLazBarcode um Datamatrix 2D Codes zu erzeugen. Doch bei manchen Strings stürzt die Komponente mit einer Zugriffsverletzung ab.
Beim LazBarcodeDemo habe ich diesen Code einmal so geändert, um bei der Taste so ein String übergeben zu können:
Code: Alles auswählen
procedure TMainForm.btnSampleTextClick(Sender: TObject);
begin
if FBarCode <> nil then
begin
FBarcode.SampleText;
edText.Text := '[)>'#$1E'06'#$1D'PRonde'#$1D'1PRonde für Ampullengreifer Dostes'#$1D'I969'#$1D'1I826'#$1E#$04;
end;
end;
Ich habe da einige Stunden debuggt und geschaut woran das liegt. In der Datei "lbc_datamatrix.pas" bleibt er bei der Funktion "dm200encode()" hier hängen:
Code: Alles auswählen
Z678: if (source[sp] > 127) then
Ich vermute jedoch dass diese Funtion "look_ahead_test()" bereits etwas falsches ausrechnet, in Zusammenhang dass sich das UTF8 Zeichen "ü" rein zufällig gerade an einer ungünstigen Stelle befindet. Denn nochmalerweise gehen UTF8 Zeichen problemlos, selbst sogar die ganzen anderen Sonderzeichen-Symbole funktionieren.
So viel ich gesehen habe ist LazBarcode eine Portierung aus Zint und Zint arbeitet in der Funktion look_ahead_test() byteweise und bei Lazarus 8-Byte weise und da vermute ich den Fehler.
Der Zint Code:
https://sourceforge.net/p/zint/code/ci/ ... /dmatrix.c
Code ab "static int dm_look_ahead_test("
Zint Sourceforge Seite:
https://sourceforge.net/projects/zint/
Nun ist mein Problem, wie kann ich das richten dass es richtig geht? Kann mich da jemand unterstützen?
Vielen Dank.
VG Markus