Mysql_fetch_lengths zurückgegebene Array von int64 auf Lazarus/Linux
Posted: 07 Mar 2025, 13:17
In Lazarus lade ich libmariadb.so.3 v3.3.10 über LoadLibrary . (Führte einen weiteren Test mit libmysqlclient.so.21 v8.0.41 durch). Wenn die Felder eines Abfrageergebnisses iteriert werden, wird die Länge eines Wertes durch die Elemente des Arrays angezeigt, die von mysql_fetch_lengths () :
zurückgegeben wurden int64 Elemente (mit einer Größe von 8 Bytes) zu enthalten, nicht LongWord/UINT32 (mit einer Größe von 4 Bytes). Bei der Aufbewahrung der Definition von Langwort zeigt die Array -Schleife doppelt so viele Elemente wie Spalten, mit einem "0" bei jedem ungeraden Index, z. B.:
fieldno LengthsPointer[fieldno]
0 2
1 0
2 10
3 0
4 3
5 0
6 1024
7 0
< /code>
Die Dokumentation besagt eindeutig, dass dies auch für die neuesten Versionen unsignierte lange ganze Zahlen sein sollte. Ich gehe davon aus, dass ich etwas falsch mache. Tue ich?
zurückgegeben wurden
Code: Select all
type
PMYSQL_LENGTHS = ^TMYSQL_LENGTHS;
TMYSQL_LENGTHS = array[0..4095] of LongWord;
...
mysql_fetch_lengths: function(Result: PMYSQL_RES): PMYSQL_LENGTHS; cdecl;
...
var
LengthsPointer: PMYSQL_LENGTHS;
begin
LengthsPointer := mysql_fetch_lengths(FCurrentResults);
for i:=0 to NumFieldsInResult do
showmessage(IntToStr(LengthsPointer^[i]));
< /code>
Das hat jahrelang gut funktioniert, in Delphi und auch in Lazarus mit einer ausführbaren Windows. Ich verwende dieselben libmysql- und libmariadb -Bibliotheken unter Windows wie unter Linux. Wenn ich nun denselben Code in Lazarus für Linux kompiliere und ihn ausführe, scheint die TMYSQL_LENGHS
fieldno LengthsPointer[fieldno]
0 2
1 0
2 10
3 0
4 3
5 0
6 1024
7 0
< /code>
Die Dokumentation besagt eindeutig, dass dies auch für die neuesten Versionen unsignierte lange ganze Zahlen sein sollte. Ich gehe davon aus, dass ich etwas falsch mache. Tue ich?