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

发布于 2024-12-13 20:21:13 字数 285 浏览 1 评论 0原文

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

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

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

提前致谢

We are producing a DLL that is targeted at both Windows 7 and XP. We want our DLL to use the newer Vista Thread Pool API when the DLL is loaded on a Windows 7 system and not when it is loaded on an XP system.

Right now, we tried compiling the DLL with runtime detection of the OS to make sure the Vista API is never used on an XP system, but we still cannot register our DLL on a Windows XP system because of a missing dependency in kernel32.dll...

Is there a way around this other than building two separate versions of the DLL?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放低过去 2024-12-20 20:21:13

为什么不使用LoadLibrary动态加载kernel32.dll,然后使用GetProcAddress来确定您需要的Vista线程池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
   .....

Why don't you dynamically load kernel32.dll using LoadLibrary and then use GetProcAddress to determine if the Vista Thread Pool API functions you need are available? If they are, fine, if they are not fall back to the older API functions.

E.g. (untested)

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
   .....
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文