Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi c-spezialist .... Struktur -> Pascal (https://www.delphipraxis.net/11264-c-spezialist-struktur-pascal.html)

Ghostwalker 3. Nov 2003 09:29


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

Robert Marquardt 3. Nov 2003 14:46

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;

Ghostwalker 3. Nov 2003 15:07

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.

Chewie 3. Nov 2003 15:22

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.

CalganX 3. Nov 2003 15:36

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

Wormid 3. Nov 2003 15:41

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

Ghostwalker 3. Nov 2003 15:50

Re: c-spezialist .... Struktur -> Pascal
 
Vorallem: libmysqld.dll enthält nicht nur den client sondern auch den Server !!!! :mrgreen:

Wormid 3. Nov 2003 15:59

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:

CalganX 3. Nov 2003 16:28

Re: c-spezialist .... Struktur -> Pascal
 
Hi,
:duck: okay. Ich habe nicht ganz hingeguckt. Sorry.

Chris

Robert Marquardt 3. Nov 2003 19:39

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 00:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz