如何将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呢?
答案 0 :(得分:5)
C结构是所谓的不完整类型。 C代码是用于实现不透明指针的常用技术。通过在C中以这种方式实现它,您可以在类型struct _ACTIVATION_CONTEXT*
的变量与其他指针不兼容的意义上具有类型安全性。好吧,除了void*
指针,它们与所有指针类型兼容。
在Delphi中没有类型不完整的东西。所以我认为最好的解决方案正是你提出的建议。完全模仿C代码并不是特别重要。您的目标是获得好处,特别是类型安全。而你的建议可能就像你将得到的一样好。
另一方面,这取决于这种类型的可见程度。如果它非常私密,可能只在单元的实现部分声明,并且谨慎使用,那么你可以采取声明空记录略高于顶部的立场。您可以得出结论PActivationContext = Pointer
是合理的。