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

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

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

提前致谢

最佳答案

为什么不使用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
   .....

10-08 06:04