AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

c-spezialist .... Struktur -> Pascal

Ein Thema von Ghostwalker · begonnen am 3. Nov 2003 · letzter Beitrag vom 3. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 09:29
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;
?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 14:46
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;
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 15:07
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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 15:22
Benutze einen packed record. Soweit ich das gesehen hab, werden zwar nur 4Byte große Werte benutzt, aber sicher ist sicher.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 15:36
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
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#6

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 15:41
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
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 15:50
Vorallem: libmysqld.dll enthält nicht nur den client sondern auch den Server !!!!
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#8

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 15:59
Isch weiss!

Finde ich auch echt lieb von dir, das du die Header dafür anpasst... Und dann hier kostenlos veröffentlichst! Echt, das ist klasse von Dir


*HeaderTranslationVonDerTodoListeStreich*
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 16:28
Hi,
okay. Ich habe nicht ganz hingeguckt. Sorry.

Chris
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: c-spezialist .... Struktur -> Pascal

  Alt 3. Nov 2003, 19:39
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
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