200分求如何将C里边的宏转化到delphi里 ( 积分: 200 )

  • 主题发起人 主题发起人 loverofangel
  • 开始时间 开始时间
L

loverofangel

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的, c里边定义了一个宏(是不是叫宏啊?)
#define MAX_REC(recname) ((BUFFER_SIZE-sizeof(FRM_HEAD))/sizeof(recname))
其中BUFFER_SIZE=2048,FRM_HEAD是一个定义好的record,定义如下:
FRM_HEAD= record
chRtnCode: Array[0..8] of Char;
chCmd: Array[0..2] of Char;
nCount: Integer;
end
只有那个recname是未定的,是record,这个宏的用法如下,
tagFRM_DEVICE_RES = record
head: FRM_HEAD;
tail: Array[0..((MAX_REC(DEVICE_RES)-1)] of DEVICE_RES;//DEVICE_RES是一个定义好的记录
end {tagFRM_DEVICE_RES};
tagFRM_SUB_RES = record
head: FRM_HEAD;
tail: Array[0..MAX_REC(SUB_RES)-1] of SUB_RES;//SUB_RES是一个定义好的记录
end
我转化成函数后,不知道那个recname参数该怎么做,而且总出现编译错误'(' expected but ')' found
我可以计算出每个记录的size,然后作为常量定义出来,可是有点麻烦,不知道大家有没有什么好的方法,或者指出转化的方法,谢谢!
 
是这样的, c里边定义了一个宏(是不是叫宏啊?)
#define MAX_REC(recname) ((BUFFER_SIZE-sizeof(FRM_HEAD))/sizeof(recname))
其中BUFFER_SIZE=2048,FRM_HEAD是一个定义好的record,定义如下:
FRM_HEAD= record
chRtnCode: Array[0..8] of Char;
chCmd: Array[0..2] of Char;
nCount: Integer;
end
只有那个recname是未定的,是record,这个宏的用法如下,
tagFRM_DEVICE_RES = record
head: FRM_HEAD;
tail: Array[0..((MAX_REC(DEVICE_RES)-1)] of DEVICE_RES;//DEVICE_RES是一个定义好的记录
end {tagFRM_DEVICE_RES};
tagFRM_SUB_RES = record
head: FRM_HEAD;
tail: Array[0..MAX_REC(SUB_RES)-1] of SUB_RES;//SUB_RES是一个定义好的记录
end
我转化成函数后,不知道那个recname参数该怎么做,而且总出现编译错误'(' expected but ')' found
我可以计算出每个记录的size,然后作为常量定义出来,可是有点麻烦,不知道大家有没有什么好的方法,或者指出转化的方法,谢谢!
 
把上面的宏转成函数.
然后需要动态设定数组.
reset array
 
楼上的能不能详细点?我不太懂
 
Delphi 好像没有宏展开,你自己展开好了,方法基本同 itren:
1、先定义一个函数用于宏展开,参数无类型
function MAX_REC(const recname): Integer;
const
BUFFER_SIZE = 2048;
begin
Result := (BUFFER_SIZE - SizeOf(FRM_HEAD)) div SizeOf(recname);
end;
2、定义你的结构
tagFRM_DEVICE_RES = record
head: FRM_HEAD;
tail: array of DEVICE_RES;
end;
......
tagFRM_SUB_RES = record
head: FRM_HEAD;
tail: array of SUB_RES;
end;
3、手动展开宏
procedure ExpandMaco;
begin
SetLength(tagFRM_SUB_RES.tail);//不过这里应该是结构的实例
end;
 
适合写成函数的写成函数。
否则,使用$Include,不就是一个编译期展开嘛。
 
其实可以看成字符串替换,自己辛苦一下吧
 
你可以试试挂接的方法。
 
后退
顶部