【问题标题】:Where is the definition of _TP_POOL structure?_TP_POOL结构的定义在哪里?
【发布时间】:2014-05-02 13:37:03
【问题描述】:

为了翻译 windows vista 线程池 API 以在我的 delphi 应用程序中使用。我需要知道_TP_POOL 的定义。我查看了winnt.h 并找到了以下typedef 声明:

typedef struct _TP_POOL TP_POOL, *PTP_POOL; 

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

【问题讨论】:

  • 我会添加Delphi标签,也许其他delphi程序员以前也这样做过。

标签: c windows delphi winapi header-files


【解决方案1】:

PTP_POOL 是一个不透明的指针。您永远不会知道,或者确实需要知道该指针所指的内容。当您调用 CreateThreadpool 时,线程池 API 会提供 PTP_POOL 值。然后,您将这些不透明的指针值传递回您调用的其他线程池 API 函数。线程池 API 实现知道指针指的是什么,但您根本不需要。

在 Delphi 中我会这样声明:

type
  PTP_POOL = type Pointer;

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

【讨论】:

  • 谢谢大卫。像往常一样,你非常乐于助人。
  • 只是为了将来参考并明确这个主题,我如何识别这样的不透明指针?
  • 因为头文件永远不会完成结构定义。
【解决方案2】:

没有定义。但是鉴于 TP_POOL 总是通过指针 (PTP_POOL) 传递,您不需要知道它的确切内部结构。只需将 PTP_POOL 视为声明为 VOID* 引用。

【讨论】:

  • 谢谢塞尔比。我想知道,但由于我不精通 C/C++,我更愿意冒险声明为指针。
【解决方案3】:

_TP_POOL 是一个不完整的类型,它永远不会在公共标头中完成。

这是类型安全的不透明句柄的常见 C 和 C++ 习惯用法。
换句话说,它们用于完全隐藏实现。

可能最著名的例子是FILE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多