在XP中加载的DLL中使用新的Vista线程池API(在XP中不使用线程池代码)
问题描述:
我们正在生产针对Windows 7和XP的DLL。我们希望我们的DLL在DLL加载到Windows 7系统时使用较新的Vista线程池API,而不是在XP系统上加载该DLL。在XP中加载的DLL中使用新的Vista线程池API(在XP中不使用线程池代码)
现在,我们尝试编译DLL以检测操作系统的运行时间,以确保Vista系统从未在XP系统上使用过,但我们仍然无法在Windows XP系统上注册我们的DLL,因为缺少依赖关系kernel32.dll ...
有没有办法解决这个问题,而不是构建两个独立版本的DLL?
在此先感谢
答
你为什么不使用调用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
.....
因为来自MSDN:“延迟加载Kernel32.dll不被支持,这个DLL是延迟加载助手例程执行延迟加载所必需的。 ref:http://msdn.microsoft.com/en-us/library/yx1x886y.aspx – franmon
他没有说延迟加载。 –
我想我不明白什么延迟加载意味着...我认为延迟加载和动态加载是相同的。你能告诉我这两个概念之间有什么区别吗? – franmon