我们正在生产一个针对Windows 7和XP的DLL。我们希望我们的DLL在Windows 7系统上加载DLL时使用较新的Vista Thread Pool API,而不是在XP系统上加载时。
目前,我们尝试使用操作系统的运行时检测来编译DLL,以确保从未在XP系统上使用Vista API,但由于缺少kernel32中的依赖性,我们仍无法在Windows XP系统上注册DLL的.dll ...
除了构建两个独立版本的DLL之外,还有其他方法吗?
提前致谢
答案 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
.....