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

  • 相关阅读:
    'static' can indeed be used in C++ to create a Static Member Function
    关闭QQ2008迷你首页
    开机无法使用欢迎屏幕
    关于U盘”无法复制:磁盘被写保护…”的解决办法
    SQL企业管理器下servers组下无项目解决方法
    COM+应用程序错误8004E00F COM+ 无法与Microsoft 分布
    安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
    牛人教你这样用Google
    在K3凭证处理中的部份实用操作
    KIS7.5SP2迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司的技术支持机构联系”
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/5454726.html
Copyright © 2020-2023  润新知