благодаря статье Руди в Delphi Corner на C ++ -> преобразование Delphi Мне удалось преобразовать более или менее сложные структуры.
Я бы хотел спросить это сообщество, правильно ли то, что я сделал.
Кроме того, у меня есть некоторые сомнения, чтобы распутать.
Вот что я сделал:
Из кода C ++:
typedef struct CorrId_t_ {
unsigned int size:8;
unsigned int valueType:4;
unsigned int classId:16;
unsigned int reserved:4;
unsigned long long intValue;
} CorrId_t;
Я перевел на следующий код в Delphi (я написал несколько функций для доступа к битовому полю):
interface
type
CorrId_t_ = record
bitfield:Cardinal; //$000000FF=size; $00000F00=valueType; $0FFFF000=classId; $F0000000=reserved;
intValue:Cardinal; //should be Uint64 but such integer type doesn't exist in Delphi 6
end;
CorrId_t = CorrId_t_;
PCorrId_t = ^CorrId_t;
procedure CorrID_setSize(var rec:CorrId_t; value:byte);
procedure CorrID_setValueType(var rec:CorrId_t; value:byte);
procedure CorrID_setClassId(var rec:CorrId_t; value:Word);
function CorrID_getSize(rec:CorrId_t):Byte;
function CorrID_getValueType(rec:CorrId_t):Byte;
function CorrID_getClassId(rec:CorrId_t):Word;
implementation
procedure CorrID_setSize(var rec:CorrId_t; Value:Byte);
begin
rec.bitfield := (rec.bitfield and $FFFFFF00) or Value;
end;
procedure CorrID_setValueType(var rec:CorrId_t; Value:Byte);
begin
rec.bitfield := (rec.bitfield and $FFFFF0FF) or Value;
end;
procedure CorrID_setClassId(var rec:CorrId_t; Value:Word);
begin
rec.bitfield := (rec.bitfield and $F0000FFF) or Value;
end;
function CorrID_getSize(rec:CorrId_t):Byte;
begin
Result := rec.bitfield and $000000FF;
end;
function CorrID_getValueType(rec:CorrId_t):Byte;
begin
Result := rec.bitfield and $00000F00;
end;
function CorrID_getClassId(rec:CorrId_t):Word;
begin
Result := rec.bitfield and $0FFFF000;
end;
Вот мои вопросы к вам:
1) правильны ли побитовые операции (внутри функций set / get access)?
2) целочисленный тип "unsigned long long" не имеет соответствия в Delphi 6. Я могу выбирать между Int64 (но это подписано ) или 32-разрядным беззнаковым целочисленный тип, такой как кардинал. Какой, по вашему мнению, лучше всего использовать?
Заранее спасибо!