c++ - 在 XP 中也加载的 DLL 中使用新的 Vista 线程池 API(XP 中未使用线程池代码)

标签 c++ windows winapi dll threadpool

我们正在生成一个同时针对 Windows 7 和 XP 的 DLL。我们希望我们的 DLL 在 Windows 7 系统上加载时使用较新的 Vista 线程池 API,而不是在 XP 系统上加载时。

现在,我们尝试编译带有操作系统运行时检测的 DLL,以确保 Vista API 永远不会在 XP 系统上使用,但我们仍然无法在 Windows XP 系统上注册我们的 DLL,因为缺少 kernel32 中的依赖项.dll...

除了构建两个单独版本的 DLL 之外,还有其他解决方法吗?

提前致谢

最佳答案

为什么不使用LoadLibrary 动态加载kernel32.dll,然后使用GetProcAddress 来确定您需要的Vista Thread Pool API 函数是否可用?如果是,那很好,如果它们没有回退到旧的 API 函数。

例如(未经测试)

typedef PTP_WAIT (WINAPI *FnCreateThreadpoolWait) (PTP_WAIT_CALLBACK,PVOID,
                                                   PTP_CALLBACK_ENVIRON);
HMODULE hLibrary;
FnCreateThreadpoolWait pFn;

hLibrary = ::LoadLibrary ("kernel32.dll");
pFn = (FnCreateThreadpoolWait) ::GetProcAddress (hLibrary,"CreateThreadpoolWait");
if (pFn == NULL) // Vista API not available
   .....

关于c++ - 在 XP 中也加载的 DLL 中使用新的 Vista 线程池 API(XP 中未使用线程池代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011023/

相关文章:

spring - 为 Spring MVC 创建和运行 docker 镜像

delphi - 在 Delphi 中写入 EXE

c++ - 有没有一种方法可以在不更改递归函数中的数组的情况下忽略数组中的元素?

c++ - Windows 7 上的奇怪行为 QT QSerialPort 不会更改串行 com 端口的设置

c# - 如何在 Windows 8 Metro App 中平滑滚动 ScrollViewer?

mysql - 如何在 Windows 操作系统中导入大型数据库并跟踪其进度

c# - 有没有一种简单有效的方法可以在 C# 或 C/C++ 中列出所有 USB 设备?

c++ - 循环中的函数,参数不变

c - 使用 OpenSCManager 加载非运行 Windows 安装的服务数据库

winapi - CFFI 和 win32 剪贴板访问