Здравствуйте, Skyvox, Вы писали:
S>Сделать на Delphi такую структуру из С++:
[Skip]
Это можно упростить
union FG_GC
{
struct
{
DWORD A : 12;
DWORD B : 3;
DWORD C : 1;
DWORD D : 5;
DWORD E : 3;
DWORD F : 8;
} bits;
DWORD AS_ULONG;
};
Сразу скажу, Delphi не поддерживает битовых переменных.
Вам достаточно привести буффер который к вам приходит к DWORD. Все остальное побитовые операции:
type
FG_GC = DWORD;
// функции доставания данных
function FG_GC_GetA(const data : FG_GC) : Integer;
begin
Result := data and $0FFF;
end;
function FG_GC_GetB(const data : FG_GC) : Integer;
begin
Result := (data shr $0C) and $7;
end;
function FG_GC_GetC(const data : FG_GC) : Integer;
begin
Result := (data shr $0F) and $1;
end;
function FG_GC_GetD(const data : FG_GC) : Integer;
begin
Result := (data shr $10) and $1F;
end;
function FG_GC_GetE(const data : FG_GC) : Integer;
begin
Result := (data shr $15) and $7;
end;
function FG_GC_GetF(const data : FG_GC) : Integer;
begin
Result := (data shr $18) and $0FF;
end;
// функции записи
procedure FG_GC_SetA(var data : FG_GC; Value : Word);
begin
data := (Value and $0FFF) or (data and $0FFFFF000);
end;
procedure FG_GC_SetB(var data : FG_GC; Value : Word);
begin
data := ((Value and $7) shl $0C) or (data and $0FFFF8FFF);
end;
procedure FG_GC_SetC(var data : FG_GC; Value : Word);
begin
data := ((Value and $1) shl $0F) or (data and $0FFFF7FFF);
end;
procedure FG_GC_SetD(var data : FG_GC; Value : Word);
begin
data := ((Value and $1F) shl $10) or (data and $0FFE0FFFF);
end;
procedure FG_GC_SetE(var data : FG_GC; Value : Word);
begin
data := ((Value and $7) shl $15) or (data and $0FF1FFFFF);
end;
procedure FG_GC_SetF(var data : FG_GC; Value : Word);
begin
data := ((Value and $0FF) shl $18) or (data and $0FFFFFF);
end;
Удачи
Здравствуйте, Danchik, Вы писали:...
Спасибо за совет! Но проблема то в том, что мне нужно вот такую структуру передавать в функцию, которая импортируется из dll библиотеки. А что если просто передавать DWORD переменную? данное битовое поле в памяти все равно же распологается как DWORD?
Здравствуйте, Skyvox, Вы писали:
S>Здравствуйте, Danchik, Вы писали:...
S>Спасибо за совет! Но проблема то в том, что мне нужно вот такую структуру передавать в функцию, которая импортируется из dll библиотеки. А что если просто передавать DWORD переменную? данное битовое поле в памяти все равно же распологается как DWORD?
Вам достаточно передать вот этот DWORD, по моему я ясно выражался

В даном случае эта структура это 4 байта и ничего более, остольное просто указания компилятору к удобному доступу к битовым значениям.
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, Skyvox, Вы писали:
S>>Здравствуйте, Danchik, Вы писали:...
S>>Спасибо за совет! Но проблема то в том, что мне нужно вот такую структуру передавать в функцию, которая импортируется из dll библиотеки. А что если просто передавать DWORD переменную? данное битовое поле в памяти все равно же распологается как DWORD?
D>Вам достаточно передать вот этот DWORD, по моему я ясно выражался
D>В даном случае эта структура это 4 байта и ничего более, остольное просто указания компилятору к удобному доступу к битовым значениям.
Сппсибо, попробую...