When converting C function prototypes to Pascal equivalent declarations, it's important to substitute the C function and argument types with the correct Pascal types. I often use a Type Translation Table for this, like the following in table 1 (optional parts on the C-side are noted between square brackets):
C/C++ Type |
ObjectPascal Type |
unsigned short [int] |
Word |
[signed] short [int] |
SmallInt |
unsigned [int] |
Cardinal { 3.25 fix } |
[signed] int |
Integer |
UINT |
LongInt { or Cardinal } |
WORD |
Word |
DWORD |
LongInt { or Cardinal } |
unsigned long |
LongInt { or Cardinal } |
unsigned long int |
LongInt { or Cardinal } |
[signed] long |
LongInt |
[signed] long int |
LongInt |
char |
Char |
signed char |
ShortInt |
unsigned char |
Byte |
char* |
PChar |
LPSTR or PSTR |
PChar |
LPWSTR or PWSTR |
PWideChar { 3.12 fix } |
void* |
Pointer |
BOOL |
Bool |
float |
Single |
double |
Double |
long double |
Extended |
|
|
LP,NP,PP,P prefix: if first = T then T becomes P else P prefix
|
|
|
HANDLE |
THandle |
FARPROC |
TFarProc |
ATOM |
TAtom |
TPOINT |
TPoint |
TRECT |
TRect |
COLORREF |
TColorRef |
OFSTRUCT |
TOFStruct |
DEBUGHOOKINFO |
TDebugHookInfo |
BITMAP |
TBitMap |
RGBTRIPLE |
TRGBTriple |
RGBQUAD |
TRGBQuad |
BITMAPCOREHEADER |
TBitmapCoreHeader |
BITMAPINFOHEADER |
TBitmapInfoHeader |
BITMAPINFO |
TBitmapInfo |
BITMAPCOREINFO |
TBitmapCoreInfo |
BITMAPFILEHEADER |
TBitmapFileHeader |
HANDLETABLE |
THandleTable |
METARECORD |
TMetaRecord |
METAHEADER |
TMetaHeader |
METAFILEPICT |
TMetaFilePict |
TEXTMETRIC |
TTextMetric |
NEWTEXTMETRIC |
TNewTextMetric |
LOGBRUSH |
TLogBrush |
LOGPEN |
TLogPen |
PATTERN |
TPattern { TLogBrush } |
PALETTEENTRY |
TPaletteEntry |
LOGPALETTE |
TLogPalette |
LOGFONT |
TLogFont |
ENUMLOGFONT |
TEnumLogFont |
PANOSE |
TPanose |
KERNINGPAIR |
TKerningPair |
OUTLINETEXTMETRIC |
TOutlineTextMetric |
FIXED |
TFixed |
MAT2 |
TMat2 |
GLYPHMETRICS |
TGlyphMetrics |
POINTFX |
TPointFX |
TTPOLYCURVE |
TTTPolyCurve |
TTPOLYGONHEADER |
TPolygonHeader |
ABC |
TABC |
RASTERIZER_STATUS |
TRasterizer_Status |
MOUSEHOOKSTRUCT |
TMouseHookStruct |
CBTACTIVATESTRUCT |
TCBTActivateStruct |
HARDWAREHOOKSTRUCT |
THardwareHookStruct |
EVENTMSG |
TEventMsg |
WNDCLASS |
TWndClass |
MSG |
TMsg |
MINMAXINFO |
TMinMaxInfo |
SEGINFO |
TSegInfo |
ACCEL |
TAccel |
PAINTSTRUCT |
TPaintStruct |
CREATESTRUCT |
TCreateStruct |
CBT_CREATEWND |
TCBT_CreateWnd |
MEASUREITEMSTRUCT |
TMeasureItemStruct |
DRAWITEMSTRUCT |
TDrawItemStruct |
DELETEITEMSTRUCT |
TDeleteItemStruct |
COMPAREITEMSTRUCT |
TCompareItemStruct |
WINDOWPOS |
TWindowPos |
WINDOWPLACEMENT |
TWindowPlacement |
NCCALCSIZE_PARAMS |
TNCCalcSize_Params |
SIZE |
TSize |
MENUITEMTEMPLATEHEADER |
TMenuItemTemplateHeader |
MENUITEMTEMPLATE |
TMenuItemTemplate |
DCB |
TDCB |
COMSTAT |
TComStat |
MDICREATESTRUCT |
TMDICreateStruct |
CLIENTCREATESTRUCT |
TClientCreateStruct |
MULTIKEYHELP |
TMultiKeyHelp |
HELPWININFO |
THelpWinInfo |
CTLSTYLE |
TCtlStyle |
CTLtype |
TCtltype |
CTLINFO |
TCtlInfo |
DDEADVISE |
TDDEAdvise |
DDEDATA |
TDDEData |
DDEPOKE |
TDDEPoke |
DDEAACK |
TDDEAck |
DEVMODE |
TDevMode |
KANJISTRUCT |
TKanjiStruct |
It's also nice to have access to the translation of the special WINDOWS.H types, which is already done by Borland, and can be found in WINTYPES.PAS (it's a rewarding experience to compare these two files with each other - you'll learn a lot about C and Pascal conversion issues).
Now that we've handled the standard built-in (and Windows) types, let's look at the C type definition of WING_DITHER_TYPE that is present in the WING.H file.
typedef enum WING_DITHER_TYPE
{
WING_DISPERSED_4x4,
WING_DISPERSED_8x8,
WING_CLUSTERED_4x4
} WING_DITHER_TYPE;
This is a so -called enumerated type, and can be translated into an ObjectPascal enumerated type very easily:
type
WING_DITHER_TYPE =
(WING_DISPERSED_4x4,
WING_DISPERSED_8x8,
WING_CLUSTERED_4x4);
While most C DLL header files contain only constant definitions (of the form #define XYZ value) and function prototypes, type definitions are also found, and are therefore important to be able to convert.
请发表评论