急!VC头文件可变结构在delphi中的表示以及sizeof值问题

lauman 2010-01-21 10:34:59
最近使用delphi6.0翻译一套vc编写的软件(调用到第三方VC编写的.dll库),由于第三方库的.h文件存在可变数据结构,如:
typedef struct test_rec
{
int id;
union{
byte u1;
byte *u2;
}f;
}TTestRec;

则在delphi 6.0中可以表示为:
TTestRec = record
id:integer;
case f:Boolean of
true:(u1:byte);
false:(u2:PByte);
end;

VC与Delphi编译器同样在8字节(编译器默认)对齐的设置下,分别使用sizeof函数计算结构的大小,发现:
VC下返回:8
Delphi返回:12

测试过一些其他的可变结构,发现delphi下的sizeof返回值总比vc返回的多4个字节,尽管都是用8字节默认结构对齐设置。

如果这样,可能意味着delphi下的代码无法使用这些转换的可变结构作为参数传入VC写的第三方dll库,肯定存在问题,
不知有高手是否知道如何解决?请指教。

不知道delphi2009/2010等有否解决办法。
...全文
72 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lauman 2010-01-21
  • 打赏
  • 举报
回复
呵呵,刚刚我也测试了一下,的确是这样,这问题有点滑稽。散分。
kfcoffe 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wzwcn 的回复:]
  TTestRec =  record
  id:integer;
  case Boolean of
      true:(u1:byte);
      false:(u2:PByte);
  end;

这样就对了,你刚才加上f:Boolean,f也算是一个域了
[/Quote]
mrak
wzwcn 2010-01-21
  • 打赏
  • 举报
回复
TTestRec = record
id:integer;
case Boolean of
true:(u1:byte);
false:(u2:PByte);
end;

这样就对了,你刚才加上f:Boolean,f也算是一个域了

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧