我们正在生产针对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
.....