Sim*_*aWB 1 c delphi struct unions
如何将此结构转换为Delphi?
typedef struct a_config {
union {
struct {
char mode[10];
char name[10];
} dn;
struct {
int r;
} sm;
struct {
int r;
} xo;
} config;
} a_config_t;
Run Code Online (Sandbox Code Playgroud)
联合等于case of记录中的结构.并非所有事情都可以1:1翻译,但这可以.
请注意,包装是一个单独的问题.虽然在这种情况下再次可能不是问题.
type
a_config_t = record
config : record
case integer of
0:(dn: record
mode : array[0..9] of ansichar;
name : array[0..9] of ansichar;
end);
1: (sm: record
r: integer;
end);
2: (xo: record
r: integer;
end);
end;
end;
// Delphi has no eq for "struct x" in "struct x {} y" construct, only for the y
a_config = a_config_t;
Run Code Online (Sandbox Code Playgroud)
AC/C++联合类似于Delphi变体记录.直译是:
type
dn_t = record
mode, name: array [0..9] of AnsiChar;
end;
sm_t = record
r: integer;
end;
xo_t = record
r: integer;
end;
a_config = record
case integer of
0: (dn: dn_t);
1: (sm: sm_t);
2: (xo: xo_t);
end;
Run Code Online (Sandbox Code Playgroud)
阅读文档中有关变体记录的更多信息:http://docwiki.embarcadero.com/RADStudio/en/Structured_Types#Variant_Parts_in_Records
在这种情况下,您可以通过删除嵌套记录来进行更简单的翻译:
type
a_config = record
case integer of
0: (mode, name: array [0..9] of AnsiChar);
1: (r: integer);
end;
Run Code Online (Sandbox Code Playgroud)