在Delphi编程中使用C语言代码
Windows下编程的工具有很多例如VBDelphiVC等等我在这里不想讨论它们的具体哪个更好一点这种幼稚的问题玩过DOS程序设计的人都知道DOS下很多语言的实质核心还是调用系统提供的汇编中断函数到了Windows下它就变成了我们常说的API了而在Windows下写程序很多时候都是调用API语言只不过是一个表达工具而已
我现在已经参加工作大约有半年左右我们公司是用Borland公司的Delphi作为主开发工具本着未偏袒任何一个工具的立场我说句公道话:Delphi是目前Win下开发程序的最快速最有效率的工具
Delphi适合用来开发应用程序但是有时侯一些底层的东西可以直接使用C语言来开发我在公司经常开发跟硬件相关的项目而很多硬件的SDK包是用C来写的这个时候我一般把它们转换成Delphi(PASCAL)语法的代码下面谈一下我的个人粗浅经验因为当时学校教的是Pascal语言所以我对C语言并不是太熟手下面的观点或者代码如有错漏之处希望高手们放小弟一马:)
一:将C语言的程序编译成DLL供Delphi调用这种方法过于简单而且需要额外带一个DLL文件所以不在本文的讨论范围之内
二:直接转换C语言代码到DELPHI代码
C语言的函数格式与Delphi不同它们是函数返回类型在前函数声明在后对于没有任何返回类型的函数则定义为VOID类型
例如:Delphi中函数function MyFunction:(intIN:integer):Bool;相应的C语言代码就变成Bool MyFunction(int intIN);又例如procedure MyProcedure;====>void MyProcedure;采用这种方法一般要求对C语言比较熟悉我一般是采用这种方法下面是我收集整理的自己常用的Delphi与C之间的类型对应表其中左边是C类型右边是对应的Delphi类型:
以下是引用片段
ABC>TABC
ACCEL>TAccel
ATOM>TAtom
BITMAP>TBitMap
BITMAPCOREHEADER>TBitmapCoreHeader
BITMAPCOREINFO>TBitmapCoreInfo
BITMAPFILEHEADER>TBitmapFileHeader
BITMAPINFO>TBitmapInfo
BITMAPINFOHEADER>TBitmapInfoHeader
BOOL>Bool
CBT_CREATEWND>TCBT_CreateWnd
CBTACTIVATESTRUCT>TCBTActivateStruct
CHAR>Char
CHAR*>PChar
CLIENTCREATESTRUCT>TClientCreateStruct
COLORREF>TColorRef
COMPAREITEMSTRUCT>TCompareItemStruct
COMSTAT>TComStat
CREATESTRUCT>TCreateStruct
CTLINFO>TCtlInfo
CTLSTYLE>TCtlStyle
CTLtype>TCtltype
DCB>TDCB
DDEAACK>TDDEAck
DDEADVISE>TDDEAdvise
DDEDATA>TDDEData
DDEPOKE>TDDEPoke
DEBUGHOOKINFO>TDebugHookInfo
DELETEITEMSTRUCT>TDeleteItemStruct
DEVMODE>TDevMode
DOUBLE>Double
DRAWITEMSTRUCT>TDrawItemStruct
DWORD>LongInt
ENUMLOGFONT>TEnumLogFont
EVENTMSG>TEventMsg
FARPROC>TFarProc
FIXED>TFixed
FLOAT>Single
GLYPHMETRICS>TGlyphMetrics
HANDLE>THandle
HANDLETABLE>THandleTable
HARDWAREHOOKSTRUCT>THardwareHookStruct
HELPWININFO>THelpWinInfo
INT>Integer
KERNINGPAIR>TKerningPair
LOGBRUSH>TLogBrush
LOGFONT>TLogFont
LOGPALETTE>TLogPalette
LOGPEN>TLogPen
LONG>LongInt
LONGDOUBLE>Extended
LONGINT>LongInt
LPSTR>PChar
LPWSTR>PWideChar
MAT>TMat
MDICREATESTRUCT>TMDICreateStruct
MEASUREITEMSTRUCT>TMeasureItemStruct
MENUITEMTEMPLATE>TMenuItemTemplate
MENUITEMTEMPLATEHEADER>TMenuItemTemplateHeader
METAFILEPICT>TMetaFilePict
METAHEADER>TMetaHeader
METARECORD>TMetaRecord
MINMAXINFO>TMinMaxInfo
MOUSEHOOKSTRUCT>TMouseHookStruct
MSG>TMsg
MULTIKEYHELP>TMultiKeyHelp
NCCALCSIZE_PARAMS>TNCCalcSize_Params
NEWTEXTMETRIC>TNewTextMetric
OFSTRUCT>TOFStruct
OUTLINETEXTMETRIC>TOutlineTextMetric
PAINTSTRUCT>TPaintStruct
PALETTEENTRY>TPaletteEntry
PANOSE>TPanose
PATTERN>TPattern
POINTFX>TPointFX
PSTR>PChar
PWSTR>PWideChar
RASTERIZER_STATUS>TRasterizer_Status
RGBQUAD>TRGBQuad
RGBTRIPLE>TRGBTriple
SEGINFO>TSegInfo
SHORT>SmallInt
SHORTINT>SmallInt
SIZE>TSize
TEXTMETRIC>TTextMetric
TPOINT>TPoint
TRECT>TRect
TTPOLYCURVE>TTTPolyCurve
TTPOLYGONHEADER>TPolygonHeader
UINT>Word
UNSIGNED>Word
UNSIGNEDCHAR>Byte
UNSIGNEDINT>Word
UNSIGNEDLONG>LongInt(DWORD)
UNSIGNEDLONGINT>LongInt
UNSIGNEDSHORT>Word
UNSIGNEDSHORTINT>Word
VOID*>Pointer
WINDOWPLACEMENT>TWindowPlacement
WINDOWPOS>TWindowPos
WNDCLASS>TWndClass
WORD>Word
[] [] [] []