_Tp_Pool结构体的定义在哪里?

6
为了将Windows Vista线程池API翻译为适用于我的Delphi应用程序,我需要知道_TP_POOL的定义。我查看了winnt.h并找到以下typedef声明:
typedef struct _TP_POOL TP_POOL, *PTP_POOL; 

我在本地头文件中找不到_TP_POOL,它的位置在哪里?


我会添加Delphi标签,也许之前有其他的Delphi程序员做过这件事。 - EProgrammerNotFound
3个回答

4
PTP_POOL 是一个不透明指针。您永远不会知道,也不需要知道该指针所指向的内容。当您调用 CreateThreadpool 时,线程池 API 提供 PTP_POOL 值。然后,您将这些不透明指针值传回给其他线程池 API 函数,以便进行调用。线程池 API 实现知道指针所指向的内容,但您只需要使用即可。

在 Delphi 中,我会这样声明它:

type
  PTP_POOL = type Pointer;

我将声明它为一个不同的类型,以便编译器确保您不会将其他类型的指针分配给 PTP_POOL 类型的变量。

谢谢你,David。像往常一样,你非常有帮助。 - EProgrammerNotFound
仅供参考并明确此主题,我该如何识别这样的不透明指针? - EProgrammerNotFound
因为头文件永远无法完成结构体定义。 - David Heffernan

3

_TP_POOL是一个不完整的类型,在公共头文件中从未被完整定义过。

这是一种常见的C和C++编程惯用语,用于类型安全的不透明句柄。
换句话说,它们被用于完全隐藏实现细节。

可能最著名的例子是FILE


3

这个并没有定义。但是考虑到 TP_POOL 总是通过指针 (PTP_POOL) 传递,你不需要了解它的具体内部结构。只需将 PTP_POOL 视为 VOID* 引用即可。


谢谢Selbie。我一直在想,但由于我不精通C/C++,所以我更喜欢问问题,而不是冒险声明为指针。 - EProgrammerNotFound

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接