C语言数据类型如何转为Delphi的(30分)

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
typedef struct
{
union
{
IN PCHAR szProcessName;
IN OUT DWORD PID;
IN HWND hWnd;
};
PCHAR DllFullPath;
BYTE Type;
}TINFO;
关键是那个union怎么处理才好
 
可能和这个差不多。
WordRec = packed record
case Integer of
0: (Lo, Hi: Byte);
1: (Bytes: array [0..1] of Byte);
end;
 
变体结构是Pascal的首创,Pascal之后的语言都是从Pascal中引入这个概念的.
其中C把变体结构称为联合.
楼主的类型在Pascal中声明如下
Type
TUnion = record
case Integer of
0:(szProcessName:PCHAR);
1:(PID:DWORD);
2:(hWnd:HWND);
end;
TInfo = record
Union : TUnion;
DllFullPath : PCHAR;
_Type : BYTE;
end;
 
楼上的不说我还真不知道,不过如果这样的话使用的时候就要这样了:
f:TInfo;

f.Union.PID = XXX;
和C不太一样了,虽然没有实质上的影响,但感觉上不如C的方便了
 
没办法,Pascal的Record中变体部分只支持在最后面出现.要出现在中间只能单独声明成新的结构.这个有一本编译原理的书上有说过原因.就是因为变体部分case没有闭合的end对应.所以只能那样子.你要是不愿意单独出现一个TUnion的话可以这样
TInfo = record
Union : record
case Integer of
0:(szProcessName:PCHAR);
1:(PID:DWORD);
2:(hWnd:HWND);
end;
DllFullPath : PCHAR;
_Type : BYTE;
end;
不过用起来还是要
f:TInfo;

f.Union.PID = XXX;
 
多人接受答案了。
 
后退
顶部