Delphi与C语言类型转换对照
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 |
| 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.

浙公网安备 33010602011771号