• 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
       
    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. 

  • 相关阅读:
    获取文件当前目录及其大小
    PLC工作原理动图,一图搞懂一个原理
    欧拉角的详解
    欧拉角的详解
    PLC/Pragmas
    ASCII码对照表
    C++ 的关键字(保留字)完整介绍
    C++ 基本语法
    pytorch笔记1
    pytorchnum_flat_features(x)
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/5454726.html
Copyright © 2020-2023  润新知