gpt4 book ai didi

c - 如何将结构体内部的空C结​​构体转换为Delphi?

转载 作者:行者123 更新时间:2023-12-03 04:34:10 25 4
gpt4 key购买 nike

如何将 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?

最佳答案

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

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

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

关于c - 如何将结构体内部的空C结​​构体转换为Delphi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com