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

时间:2011-11-04 14:45:59

标签: c++ windows winapi dll threadpool

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

目前,我们尝试使用操作系统的运行时检测来编译DLL,以确保从未在XP系统上使用Vista API,但由于缺少kernel32中的依赖性,我们仍无法在Windows XP系统上注册DLL的.dll ...

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

提前致谢

1 个答案:

答案 0 :(得分:6)

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

E.g。 (另)

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
   .....