Mysql_fetch_lengths zurückgegebene Array von int64 auf Lazarus/Linux

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Mysql_fetch_lengths zurückgegebene Array von int64 auf Lazarus/Linux

by Anonymous » 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

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 
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?

Top