![]() |
c-spezialist .... Struktur -> Pascal
Hi Leuts,
ich hoffe mal das mir hier jemand helfen. Wie setzt man folgende C-Struktur in Pascal um:
Code:
?
typedef struct charset_info_st
{ uint number; const char *name; uchar *ctype; uchar *to_lower; uchar *to_upper; uchar *sort_order; uint strxfrm_multiply; int (*strcoll)(const uchar *, const uchar *); int (*strxfrm)(uchar *, const uchar *, int); int (*strnncoll)(const uchar *, int, const uchar *, int); int (*strnxfrm)(uchar *, const uchar *, int, int); my_bool (*like_range)(const char *, uint, pchar, uint, char *, char *, uint *, uint *); uint mbmaxlen; int (*ismbchar)(const char *, const char *); my_bool (*ismbhead)(uint); int (*mbcharlen)(uint); } CHARSET_INFO; |
Re: c-spezialist .... Struktur -> Pascal
Na das ist schon ein etwas heftigeres Ding.
Leider ist nicht alle noetige Info vorhanden. my_bool fehlt und ausgesprochen wichtig hier ist das Betriebssystem. Ich vermute Linux und deshalb sind die Funktionen cdecl und nicht stdcall.
Delphi-Quellcode:
type
Tstrcoll = function(Param1: PByte; Param2: PByte): Integer; cdecl; Tstrxfrm = function(Param1: PByte; Param2: PByte; Param3: Integer): Integer; cdecl; Tstrnncoll = function(Param1: PByte; Param2: Integer; Param3: PByte; Param4: Integer): Integer; cdecl; Tstrnxfrm = function(Param1: PByte; Param2: PByte; Param3: Integer; Param4: Integer): Integer; cdecl; // der pchar im Original ist verdaechtig Tlike_range = function(Param1: PChar; Param2: Cardinal; Param3: PChar; Param4: Cardinal; Param5: PChar; Param6: PChar; Param7: PCardinal; Param8: PCardinal): my_bool; cdecl; Tismbchar = function(Param1: PChar; Param2: PChar): Integer; cdecl; Tismbhead = function(Param1: Cardinal): my_bool; cdecl; Tmbcharlen = function(Param1: Cardinal): Integer; cdecl; PCHARSET_INFO = ^CHARSET_INFO; // den braucht man eh immer CHARSET_INFO = record // moeglicherweise packed record number: Cardinal; name: PChar; ctype: PByte; to_lower: PByte; to_upper: PByte; sort_order: PByte; strxfrm_multiply: Cardinal; strcoll: Tstrcoll; strxfrm: Tstrxfrm; strnncoll: Tstrnncoll; strnxfrm: Tstrnxfrm; like_range: Tlike_range; mbmaxlen: Cardinal; ismbchar: Tismbchar; ismbhead: Tismbhead; mbcharlen: mbcharlen; end; |
Re: c-spezialist .... Struktur -> Pascal
Erstmal, Danke Robert :)
nein..das ganze ist Windows-System. My_bool ist einfach ein Char (Unsined Byte). von daher geh ich jetzt mal von stdcall aus. Das ganze entstammt einer der Header-Dateien von Mysql. Ich bin gerade drüber die Mysql.pas von M. Fichtner auf die libmysqld.dll anzupassen. Dabei ist mir aufgefallen das er diese Struktur nicht übersetzt hat. Mal sehen..damit sollte das ganze jetzt eingentlich laufen. |
Re: c-spezialist .... Struktur -> Pascal
Benutze einen packed record. Soweit ich das gesehen hab, werden zwar nur 4Byte große Werte benutzt, aber sicher ist sicher.
|
Re: c-spezialist .... Struktur -> Pascal
Hi Ghostwalker,
was muss man den groß an der Unit verändern? AFAIK wird die libmysql.dll ja von der MySQL.pas verwendet oder etwa nicht? Chris |
Re: c-spezialist .... Struktur -> Pascal
Er möchte aber die libmysqld.dll benutzen... Und die mysql.pas von Herrn Fichtner ist leider nicht mehr ganz up to date (für mysql 3.x, mittlerweile ist aber 4.x "am Start"), deswegen fehlen einige Typen und neuere Funktionen.
Gruß Wormid |
Re: c-spezialist .... Struktur -> Pascal
Vorallem: libmysqld.dll enthält nicht nur den client sondern auch den Server !!!! :mrgreen:
|
Re: c-spezialist .... Struktur -> Pascal
Isch weiss!
Finde ich auch echt lieb von dir, das du die Header dafür anpasst... Und dann hier kostenlos veröffentlichst! :mrgreen: Echt, das ist klasse von Dir :thuimb: *HeaderTranslationVonDerTodoListeStreich* :mrgreen: |
Re: c-spezialist .... Struktur -> Pascal
Hi,
:duck: okay. Ich habe nicht ganz hingeguckt. Sorry. Chris |
Re: c-spezialist .... Struktur -> Pascal
MySQL, also Linux-Herkunft. Da habe ich richtig geraten.
Ich wuerde wegen der Herkunft eben auch unter Windows auf cdecl tippen. Unter Linux gibt es NUR cdecl beim gcc, deshalb sind auch oft die Windows DLLs von Portierungen cdecl. Auf packed record wuerde ich nicht wetten. Der Grund ist der gleiche. Das ist beim gcc nicht vorgesehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz