Преобразование структуры c объединением в запись Delphi - PullRequest
0 голосов
/ 05 июля 2019

Мне интересно, если эта структура c, которую я перевел на Delphi, неверна, и если неверна, как она может быть переведена правильно?Поскольку объединение является средней структурой, кажется, что преобразовать это не так просто.Любая помощь будет высоко ценится

typedef struct FWPM_FILTER0_ {
    GUID                   filterKey;
    FWPM_DISPLAY_DATA0     displayData;
    UINT32                 flags;
    GUID                   *providerKey;
    FWP_BYTE_BLOB          providerData;
    GUID                   layerKey;
    GUID                   subLayerKey;
    FWP_VALUE0             weight;
    UINT32                 numFilterConditions;
    FWPM_FILTER_CONDITION0 *filterCondition;
    FWPM_ACTION0           action;
    union {
        UINT64 rawContext;
        GUID   providerContextKey;
    };
    GUID                   *reserved;
    UINT64                 filterId;
    FWP_VALUE0             effectiveWeight;
} FWPM_FILTER0;
type
  FWPM_FILTER0 = record
    filterKey: TGUID;
    displayData: FWPM_DISPLAY_DATA0;
    flags: UINT32;
    providerKey: PGUID;
    providerData: FWP_BYTE_BLOB;
    layerKey: TGUID;
    subLayerKey: TGUID;
    weight: FWP_VALUE0;
    numFilterConditions: UINT32;
    filterCondition: PFWPM_FILTER_CONDITION0;
    action: FWPM_ACTION0;
    case Integer of
      0: (rawContext: UINT64);
      1: (providerContextKey: TGUID;
    reserved: PGUID;
    filterId: UINT64;
    effectiveWeight: FWP_VALUE0);
  end;

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Вариантная часть записи должна появляться в конце записи в Delphi.Поскольку это объединение появляется в середине структуры, вам нужно объявить объединение как отдельный тип в Delphi, а затем использовать его в содержащей записи.

0 голосов
/ 06 июля 2019

Просто сложите поля после блока CASE в одну из ветвей (желательно самую большую)

Чтобы объявить отдельную запись, потребуется изменить способ доступа к ней.

Ps не полностьюмой, см. сайт Руди Велтуиса, http://rvelthuis.de/articles/articles-convert.html

...