在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 
    ..... 
+0

因为来自MSDN:“延迟加载Kernel32.dll不被支持,这个DLL是延迟加载助手例程执行延迟加载所必需的。 ref:http://msdn.microsoft.com/en-us/library/yx1x886y.aspx – franmon

+1

他没有说延迟加载。 –

+0

我想我不明白什么延迟加载意味着...我认为延迟加载和动态加载是相同的。你能告诉我这两个概念之间有什么区别吗? – franmon