在Delphi编程中使用C语言代码[1]
在Delphi编程中使用C语言代码
Windows下编程的工具有很多 例如VB Delphi VC等等 我在这里不想讨论 它们的具体哪个更好一点 这种幼稚的问题 玩过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 PAREITEMSTRUCT > TCompareItemStruct STAT > 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 LONG DOUBLE > Extended LONG INT > 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 SHORT INT > SmallInt SIZE > TSize TEXTMETRIC > TTextMetric TPOINT > TPoint TRECT > TRect TTPOLYCURVE > TTTPolyCurve TTPOLYGONHEADER > TPolygonHeader UINT > Word UNSIGNED > Word UNSIGNED CHAR > Byte UNSIGNED INT > Word UNSIGNED LONG > LongInt(DWORD) UNSIGNED LONG INT > LongInt UNSIGNED SHORT > Word UNSIGNED SHORT INT > Word VOID* > Pointer WINDOWPLACEMENT > indowPlacement WINDOWPOS > indowPos WNDCLASS > ndClass WORD > Word
lishixinzhi/Article/program/Delphi/201311/24758