请问OP中是否有C中的union类型?如何定义?(100分)

  • 主题发起人 主题发起人 滨滨
  • 开始时间 开始时间

滨滨

Unregistered / Unconfirmed
GUEST, unregistred user!
我在写一个DLL,用到一个公司的接口,但这个接口是为C提供的,我想把.h中的声明转成Pascal,好在Delphi中开发,其中有不少struct,union的声明,我不知道该如何做,请教!
此外,在移植C程序到Delphi时,还有哪些数据类型是对应的,哪些是不一致的需要调整请高手指点一二,我怕两种语言如有数据类型及长度不一样,接口就会出错。
 
type

TEmployee = record
FirstName, LastName: string[40];
BirthDate: TDate;
case Salaried: Boolean of
True: (AnnualSalary: Currency);
False: (HourlyWage: Currency);
end;

type

TPerson = record
FirstName, LastName: string[40];
BirthDate: TDate;
case Citizen: Boolean of
True: (Birthplace: string[40]);
False: (Country: string[20];
EntryPort: string[20];
EntryDate, ExitDate: TDate);
end;

type

TShapeList = (Rectangle, Triangle, Circle, Ellipse, Other);
TFigure = record
case TShapeList of
Rectangle: (Height, Width: Real);
Triangle: (Side1, Side2, Angle: Real);
Circle: (Radius: Real);
Ellipse, Other: ();
end;
摘自帮助!
 
type abc=record
abc:string
bcd:integer;
case integer of
0:a:integer;
1:a:boolean;
end;
 
case integer of
case TShapeList of
case Citizen: Boolean of
中的integer,TShapeList,Citizen是什么意思?和C中的union相差很大,不能理解?
这三个的形式好象也不完全一样???
 
case后面的你可以当他是放pi,没什么实际意义的。
 
为什么要这样???pascal不是很严谨的语言吗?
我直截了当点吧,下面的C声明如何改为OP的?

typedef int APW_EV_TYPE;
typedef struct {
APW_EV_TYPE type
// type requested and returned
union {
HANDLE string_value
// result if APW_STR_TYPE (handle to string)
double real_value
// result if APW_REAL_TYPE
LONG long_value
// result if APW_LONG_TYPE
LPSTR string_ptr
// string used only with APWC_SETVAR
} value;
} APWC_EVALPB, FAR *APWC_EVALPB_PTR;

谢谢!
 
type
TValue = record
case Integer of
0: string_value: THandle;
1: real_value: double;
2: long_value: LongInt;
3: string_ptr: PChar;
end;

TAPWC_EVALPB = record
aType: Int;
Value: TValue
end;
 
case后面的0,1,2,3是不是都没有意义?改成其他的也一样?这是什么语法?
 
非常感谢,一点非份之想,能不能把C-OP之间数据类型的对应关系解释一下?对了,还有WinAPI中的数据类型什么WORD,DWORD之类,在头文件里找这些定义,真是太难了。
 
没有意义的,你改成4、5、6、7也一样的
见:http://www.delphibbs.com/delphibbs/dispq.asp?LID=1017368
里面Pipi.大虾的看法
 
c++ delphi
WORD Word
DWORD DWord, LongInt
HANDLE THandle, HWnd
LONG LongInt, DWord
.
.
.
 
后退
顶部