翻译一个SDK时遇到了union,不知道怎么办了,希望高手帮忙看看能用delphi搞定不!先谢过了!:)
typedef struct {
DWORD dwSize;
char sDecoderIP[16];
WORD wDecoderPort;
WORD wLoadMode;
union
{
BYTE byFile[100];
struct
{
DWORD dwChannel;
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
NET_DVR_TIME struStartTime;
NET_DVR_TIME struStopTime;
}bytime;
}mode_size;
}NET_DVR_PLAYREMOTEFILE,*LPNET_DVR_PLAYREMOTEFILE;typedef struct {
DWORD dwWorkType;
char sDVRIP[16];
WORD wDVRPort;
BYTE byChannel;
BYTE byLinkMode;
DWORD dwLinkType;
union
{
struct
{
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
char cReserve[52];
}userInfo;
struct
{
BYTE fileName[100];
}fileInfo;
struct
{
DWORD dwChannel;
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
NET_DVR_TIME struStartTime;
NET_DVR_TIME struStopTime;
}timeInfo;
}objectInfo;
}NET_DVR_DECCHANSTATUS, *LPNET_DVR_DECCHANSTATUS;
typedef struct {
DWORD dwSize;
char sDecoderIP[16];
WORD wDecoderPort;
WORD wLoadMode;
union
{
BYTE byFile[100];
struct
{
DWORD dwChannel;
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
NET_DVR_TIME struStartTime;
NET_DVR_TIME struStopTime;
}bytime;
}mode_size;
}NET_DVR_PLAYREMOTEFILE,*LPNET_DVR_PLAYREMOTEFILE;typedef struct {
DWORD dwWorkType;
char sDVRIP[16];
WORD wDVRPort;
BYTE byChannel;
BYTE byLinkMode;
DWORD dwLinkType;
union
{
struct
{
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
char cReserve[52];
}userInfo;
struct
{
BYTE fileName[100];
}fileInfo;
struct
{
DWORD dwChannel;
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
NET_DVR_TIME struStartTime;
NET_DVR_TIME struStopTime;
}timeInfo;
}objectInfo;
}NET_DVR_DECCHANSTATUS, *LPNET_DVR_DECCHANSTATUS;
type
NET_DVR_PLAYREMOTEFILE = record
dwSize : dword;
sDecoderIP: array[0..15] of char;
wDecoderPort: word;
wLoadMode: word;
mode_size = record
case integer of
0:
byFile: array[0..99] of byte;
1:
bytime = record
dwChannel: dword;
sUserName: array[0..NAME_LEN - 1] of byte;
sPassword: array[0..PASSWD_LEN - 1] of byte;
struStartTime: NET_DVR_TIME;
struStopTime: NET_DVR_TIME;
end;
end;
end;
LPNET_DVR_PLAYREMOTEFILE = ^NET_DVR_PLAYREMOTEFILE; NET_DVR_DECCHANSTATUS = record
dwWorkType: dword;
sDVRIP: array[0..15] of char;
wDVRPort: word;
byChannel: byte;
byLinkMode: byte;
dwLinkType: dword;
objectInfo = record
case integr of
0:
userInfo = record
sUserName: array[0..NAME_LEN - 1] of byte;
sPassword: array[0..PASSWD_LEN - 1] of byte;
cReserve: array[0..51] of char;
end;
1:
fileInfo = record
fileName: array[0..99] of byte;
end;
2:
timeInfo = record
dwChannel: dword;
sUserName: array[0..NAME_LEN - 1] of byte;
sPassword: array[0..PASSWD_LEN - 1] of byte;
struStartTime: NET_DVR_TIME;
struStopTime: NET_DVR_TIME;
end;
end;
end;
LPNET_DVR_DECCHANSTATUS = ^NET_DVR_DECCHANSTATUS;还有,NAME_LEN、PASSWD_LEN、NET_DVR_TIME这些定义没有,你自己翻译吧。
象sUserName之类的array of byte也可以定义为array of char,具体要看你的程序中是怎么使用的。
这样就好了: tbytime = record
dwChannel: dword;
sUserName: array[0..NAME_LEN - 1] of byte;
sPassword: array[0..PASSWD_LEN - 1] of byte;
struStartTime: NET_DVR_TIME;
struStopTime: NET_DVR_TIME;
end; tmode_size = record
case integer of
0:
(byFile: array[0..99] of byte);
1:
(bytime: tbytime);
end; NET_DVR_PLAYREMOTEFILE = record
dwSize : dword;
sDecoderIP: array[0..15] of char;
wDecoderPort: word;
wLoadMode: word;
mode_size: tmode_size;
end;
LPNET_DVR_PLAYREMOTEFILE = ^NET_DVR_PLAYREMOTEFILE; tuserInfo = record
sUserName: array[0..NAME_LEN - 1] of byte;
sPassword: array[0..PASSWD_LEN - 1] of byte;
cReserve: array[0..51] of char;
end; tfileInfo = record
fileName: array[0..99] of byte;
end; ttimeInfo = record
dwChannel: dword;
sUserName: array[0..NAME_LEN - 1] of byte;
sPassword: array[0..PASSWD_LEN - 1] of byte;
struStartTime: NET_DVR_TIME;
struStopTime: NET_DVR_TIME;
end; tobjectInfo = record
case integer of
0:
(userinfo: tuserinfo);
1:
(fileinfo: tfileinfo);
2:
(timeinfo: ttimeinfo);
end; NET_DVR_DECCHANSTATUS = record
dwWorkType: dword;
sDVRIP: array[0..15] of char;
wDVRPort: word;
byChannel: byte;
byLinkMode: byte;
dwLinkType: dword;
objectInfo: tobjectInfo;
end;
LPNET_DVR_DECCHANSTATUS = ^NET_DVR_DECCHANSTATUS;