我现在要写一个程序,要能在Win2K和Win98下都能使用,现在的问题是我的程序用到了一些NTDDK的东东,而用到NTDDK的那部分代码是不需要在Win98下执行的,
现在的问题是我想同一个软件能不能在Win2K下和Win98下执行不同的东西(因为Win98不支持那些NTDDK的函数,运行的时候会报错,而Win2K下又必须使用)。
注意:不能说什么在Win98下运行的程序和Win2K运行的分开编译(因为我要用同一个EXE分别在两个操作系统上运行!)
现在的问题是我想同一个软件能不能在Win2K下和Win98下执行不同的东西(因为Win98不支持那些NTDDK的函数,运行的时候会报错,而Win2K下又必须使用)。
注意:不能说什么在Win98下运行的程序和Win2K运行的分开编译(因为我要用同一个EXE分别在两个操作系统上运行!)
BOOL IsWin2000 ()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx; // Try calling GetVersionEx using the OSVERSIONINFOEX structure,
// which is supported on Windows 2000.
//
// If that fails, try using the OSVERSIONINFO structure. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
} switch (osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT: if ( osvi.dwMajorVersion >= 5 )
return TRUE; break;
}
return FALSE;
}
if(IsWinNT()){
LoadLibrary();
pfn = GetProcAddress();
pfn();
FreeLibrary();
}
else{
//do nothing;
}
在你的文件头加上下面几句
#pragma comment(lib,"Delayimp.lib")
#pragma comment(linker,"/DelayLoad:\"mydll.dll\"")//使用NTDDK中的dll替换mydll.dll
#pragma comment(linker,"/Delay:unload")
#pragma comment(linker,"/Delay:nobind")这样将确保只有在你调用NTDDK中的函数时才会加载NTDDK的动态库,而不是进程启动时加载动态库。