繁体   English   中英

如何将struct内部的空C struct转换为Delphi?

[英]How to translate an empty C struct inside struct to Delphi?

如何字面翻译下面为空,C struct的内部struct德尔福(从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?

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

在Delphi中,没有不完整的类型。 因此,我认为最好的解决方案正是您所提出的。 准确地模仿C代码并不是特别重要。 您的目标是获得好处,特别是类型安全。 您提出的建议可能会和您获得的一样好。

另一方面,它取决于此类型的可见性。 如果它是非常私有的,也许仅在单元的实现部分中声明,并且很少使用,那么您可能会采取这样的立场:声明空记录稍微有点过头。 您可能会得出结论, PActivationContext = Pointer是合理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM