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

TLa*_*ama 2 c delphi winapi struct

如何以下为空,C字面翻译struct里面struct德尔福(从WINNT.H):

typedef struct _TP_CALLBACK_ENVIRON_V3 {
    ...
    struct _ACTIVATION_CONTEXT        *ActivationContext;
    ...
} TP_CALLBACK_ENVIRON_V3;
Run Code Online (Sandbox Code Playgroud)

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

type
  PActivationContext = ^TActivationContext;
  TActivationContext = record

  end;

  TTPCallbackEnvironV3 = record
    ...
    ActivationContext: PActivationContext;
    ...
  end;
Run Code Online (Sandbox Code Playgroud)

但是,你知道,一个空记录......那么,你将如何将上述结构翻译成Delphi?

Dav*_*nan 5

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

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

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