有一段C语言的结构体声明,不知道如何转换成 Delphi 语句, 请教各位高手.
typedef struct a_backup_db {
unsigned short version;
const char * output_dir;
const char * connectparms;
const char * startline;
MSG_CALLBACK confirmrtn;
MSG_CALLBACK errorrtn;
MSG_CALLBACK msgrtn;
MSG_CALLBACK statusrtn;
bool backup_database : 1;
bool backup_logfile : 1;
bool backup_writefile: 1;
bool no_confirm : 1;
bool quiet : 1;
bool rename_log : 1;
bool truncate_log : 1;
bool rename_local_log: 1;
const char * hotlog_filename;
}不知道写成下面这样的是否对:
Type p_Backup_db = ^a_Backup_db;
a_backup_db = Record
Version: Word;
OutPut_dir: Array[0..255] Of Char;
ConnectParms: Array[0..255] Of Char;
StartLine: Array[0..255] Of Char;
ConfirmRtn: uInt;
ErrorRtn: uInt;
MsgRtn: uInt;
StatusRtn: uInt;
Backup_database: Bool;
Backup_logfile: Bool;
Backup_writefile: Bool;
no_confirm: Bool;
quiet: Bool;
rename_log: Bool;
Truncate_log: Bool;
rename_local_log: Bool;
Hotlog_fileName: Array[0..255] Of Char;
End;
typedef struct a_backup_db {
unsigned short version;
const char * output_dir;
const char * connectparms;
const char * startline;
MSG_CALLBACK confirmrtn;
MSG_CALLBACK errorrtn;
MSG_CALLBACK msgrtn;
MSG_CALLBACK statusrtn;
bool backup_database : 1;
bool backup_logfile : 1;
bool backup_writefile: 1;
bool no_confirm : 1;
bool quiet : 1;
bool rename_log : 1;
bool truncate_log : 1;
bool rename_local_log: 1;
const char * hotlog_filename;
}不知道写成下面这样的是否对:
Type p_Backup_db = ^a_Backup_db;
a_backup_db = Record
Version: Word;
OutPut_dir: Array[0..255] Of Char;
ConnectParms: Array[0..255] Of Char;
StartLine: Array[0..255] Of Char;
ConfirmRtn: uInt;
ErrorRtn: uInt;
MsgRtn: uInt;
StatusRtn: uInt;
Backup_database: Bool;
Backup_logfile: Bool;
Backup_writefile: Bool;
no_confirm: Bool;
quiet: Bool;
rename_log: Bool;
Truncate_log: Bool;
rename_local_log: Bool;
Hotlog_fileName: Array[0..255] Of Char;
End;
另外: delphi中是没有位字段的,你这样定义出来的结构与C的结构大小将不同
如果要完全兼容性,可将8个bool类定义成一个dword(当然,这个跟编译器有关,在windows下,一般C编译器的缺省对齐方式为4字节,即一个dword),然后用位操作对它们赋值
====================================================用不用没关系,如何类型转换是另一回事^_^
谢谢指教!上面没有写清楚, C 的声明原型应该是这样的:
typedef struct a_backup_db {
unsigned short version;
const char * output_dir;
const char * connectparms;
const char * startline;
MSG_CALLBACK confirmrtn;
MSG_CALLBACK errorrtn;
MSG_CALLBACK msgrtn;
MSG_CALLBACK statusrtn;
char backup_database;
char backup_logfile;
char backup_writefile;
char no_confirm;
char quiet;
char rename_log;
char truncate_log;
char rename_local_log;
const char * hotlog_filename;
} a_backup_db;
不知道现在下面这样的声明是否正确?Type
p_Backup_db = ^a_Backup_db;
a_backup_db = Record
Version: Word;
OutPut_dir: PChar;
ConnectParms: PChar;
StartLine: PChar;
ConfirmRtn: Pointer;
ErrorRtn: Pointer;
MsgRtn: Pointer;
StatusRtn: Pointer;
Backup_database: uChar;
Backup_logfile: uChar;
Backup_writefile: uChar;
no_confirm: uChar;
quiet: uChar;
rename_log: uChar;
Truncate_log: uChar;
rename_local_log: uChar;
Hotlog_fileName: PChar;
End;
l_Backup.Version := 9;
l_Backup.Output_Dir:=PChar(ls_TempDir);
l_Backup.ConnectParms := PChar(ls_ConnectParm);
l_Backup.StartLine := Nil;
l_Backup.ConfirmRtn := Nil;
l_Backup.ErrorRtn := Nil;
l_Backup.MsgRtn := Nil;
l_Backup.StatusRtn := Nil;
l_Backup.Backup_Database := 1;
l_Backup.Backup_LogFile := 0;
l_Backup.Backup_WriteFile := 0;
l_Backup.No_Confirm := 0;
l_Backup.Quiet := 0;
l_Backup.Rename_log := 0;
l_Backup.Truncate_log := 0;
l_Backup.Rename_local_log := 0;
l_Backup.hotlog_filename := Nil;
{$ALIGN ON}
a_backup_db = Record 改为 a_backup_db = packed Record建议uChar 直接用 Byte