从其它平台迁移而来
起因 以前使用Delphi调用海康SDK时,专门改写过HCNetSDK.h,当时大部分桌面应用还都是32位的,毕竟64位还没彻底普及开(即便现在,还是有一部分桌面考虑兼容性依然是32位)。后来也搞过64位版的,编译没问题,运行就不成功。虽然没成功,但心里还是清楚这基本上是数据类型的问题,由于对64位了解不多,也就一直搁置着。
转Lazarus之后,又搞过一次64位版,还是没成功。后来知道有ctypes这个单元,也知道这是专门针对c语言数据类型的,但一直没去看过。近来又想起这个事,就想一探究竟。
探 直接看源码,其实就是给pascal的数据类型取了个c的别名。要想了解透彻,自已撸码跑一下还是很有必要的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 program test; uses SysUtils, ctypes; begin writeln(Format('%-16s%s', ['type', 'size'])); writeln('--------------------'); writeln(Format('%-16s%d', ['cint8', SizeOf(cint8)])); writeln(Format('%-16s%d', ['cuint8', SizeOf(cuint8)])); writeln(Format('%-16s%d', ['cchar', SizeOf(cchar)])); writeln(Format('%-16s%d', ['cschar', SizeOf(cschar)])); writeln(Format('%-16s%d', ['cuchar', SizeOf(cuchar)])); writeln(Format('%-16s%d', ['cint16', SizeOf(cint16)])); writeln(Format('%-16s%d', ['cuint16', SizeOf(cuint16)])); writeln(Format('%-16s%d', ['cshort', SizeOf(cshort)])); writeln(Format('%-16s%d', ['csshort', SizeOf(csshort)])); writeln(Format('%-16s%d', ['cushort', SizeOf(cushort)])); writeln(Format('%-16s%d', ['cint32', SizeOf(cint32)])); writeln(Format('%-16s%d', ['cuint32', SizeOf(cuint32)])); writeln(Format('%-16s%d', ['cint64', SizeOf(cint64)])); writeln(Format('%-16s%d', ['cuint64', SizeOf(cuint64)])); writeln(Format('%-16s%d', ['clonglong', SizeOf(clonglong)])); writeln(Format('%-16s%d', ['cslonglong', SizeOf(cslonglong)])); writeln(Format('%-16s%d', ['culonglong', SizeOf(culonglong)])); writeln(Format('%-16s%d', ['cbool', SizeOf(cbool)])); writeln(Format('%-16s%d', ['cint', SizeOf(cint)])); writeln(Format('%-16s%d', ['csint', SizeOf(csint)])); writeln(Format('%-16s%d', ['cuint', SizeOf(cuint)])); writeln(Format('%-16s%d', ['clong', SizeOf(clong)])); writeln(Format('%-16s%d', ['cslong', SizeOf(cslong)])); writeln(Format('%-16s%d', ['culong', SizeOf(culong)])); writeln(Format('%-16s%d', ['csigned', SizeOf(csigned)])); writeln(Format('%-16s%d', ['cunsigned', SizeOf(cunsigned)])); writeln(Format('%-16s%d', ['csize_t', SizeOf(csize_t)])); writeln(Format('%-16s%d', ['cfloat', SizeOf(cfloat)])); writeln(Format('%-16s%d', ['cdouble', SizeOf(cdouble)])); writeln(Format('%-16s%d', ['clongdouble', SizeOf(clongdouble)])); Readln(); end....