如何将struct中的空C结构转换为Delphi?

时间:2014-12-01 17:00:39

标签: c delphi winapi struct

如何将struct内的以下空C struct字面翻译成Delphi(来自winnt.h):

typedef struct _TP_CALLBACK_ENVIRON_V3 {
    ...
    struct _ACTIVATION_CONTEXT        *ActivationContext;
    ...
} TP_CALLBACK_ENVIRON_V3;

我倾向于只使用Pointer,因为这个结构不能被操纵,无论如何它都是指针。我只是好奇,如何从字面上翻译它(如果可能的话)。我在考虑这样的事情:

type
  PActivationContext = ^TActivationContext;
  TActivationContext = record

  end;

  TTPCallbackEnvironV3 = record
    ...
    ActivationContext: PActivationContext;
    ...
  end;

但是,你知道,空记录......那么,你怎么会将上述结构翻译成Delphi呢?

1 个答案:

答案 0 :(得分:5)

C结构是所谓的不完整类型。 C代码是用于实现不透明指针的常用技术。通过在C中以这种方式实现它,您可以在类型struct _ACTIVATION_CONTEXT*的变量与其他指针不兼容的意义上具有类型安全性。好吧,除了void*指针,它们与所有指针类型兼容。

在Delphi中没有类型不完整的东西。所以我认为最好的解决方案正是你提出的建议。完全模仿C代码并不是特别重要。您的目标是获得好处,特别是类型安全。而你的建议可能就像你将得到的一样好。

另一方面,这取决于这种类型的可见程度。如果它非常私密,可能只在单元的实现部分声明,并且谨慎使用,那么你可以采取声明空记录略高于顶部的立场。您可以得出结论PActivationContext = Pointer是合理的。