有没有人做过C++的声明到Delphi的转换工作?(200分)

X

xwings

Unregistered / Unconfirmed
GUEST, unregistred user!
有时候我们想自己转换一些自定义C++的函数定义或者一些其他声明.
但是难免很多地方不是很清楚.
DFW内一定有这方面经验的高手,请把你们的经验写出来吧.

请先写一些简单的.如函数声明.变量定义.
然后再涉及一些复杂的转换工作.如对象定义.接口等等...
我想这些还是有用处的. 毕竟很多资料,COM接口和SDK都是c++写的.还有很多在搞跨语言开发
有没有人支持阿?
 
网上有现成的工具
 
以前整理的

INT -> Integer
UNSIGNED -> Word
UNSIGNED INT -> Word
UINT -> Word
WORD -> Word
UNSIGNED SHORT -> Word
UNSIGNED SHORT INT -> Word
SHORT -> SmallInt
SHORT INT -> SmallInt
DWORD -> LongInt
LONG -> LongInt
LONG INT -> LongInt
UNSIGNED LONG -> LongInt
UNSIGNED LONG INT -> LongInt
CHAR -> Char
UNSIGNED CHAR -> Byte
CHAR* -> PChar
LPSTR -> PChar
PSTR -> PChar
LPWSTR -> PWideChar
PWSTR -> PWideChar
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
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
 
简单的类型转换比较容易...工具我也用过.

象这个怎么转换 ?
HRESULT f1( ISomeInterface** ppI);
HRESULT f2( VARIANT_BOOL* pbBoolVal);
HRESULT f3( BSTR bstrFileName);
HRESULT f4( BSTR* pbstrFileName);
HRESULT f5( Long* pLongVal);
HRESULT f6( Long** ppLongVal);




 
是不是这样:Long**应该是一个指向Long类型的指针的批针参数,所以这个参数还是指针
声明就f6(LongInt ppLongVal),然后传参数的时候就@(@(long)),没试试,乱猜的
 
我也不是很清楚.可能用var来声明吧.
 
vcl的源码是最好的教材呀
 
c++头文件转换成Delphi的单元文件:
http://www.drbob42.first-web.net/headconv.zip
不过转换的不是很好,有些地方需要自己再手工修改一下。
 
我用过了. .还不如自己转换呢.
 
多人接受答案了。
 
顶部