在NT之前的系统上调用NT功能

时间:2008-12-02 16:55:04

标签: c++ windows winapi dll

所以我没有做很多Win32调用,但最近我不得不使用GetFileTime()SetFileTime()函数。虽然我的程序中没有正式支持Win98及以下版本,但无论如何都会在那里使用它,我尽量保持它的可用性。我只是想知道会发生什么,因为这些功能在NT之前的系统中不存在,他们是否会收到某种类型的错误消息,例如因为在这种情况下我会添加操作系统检查?感谢

3 个答案:

答案 0 :(得分:8)

如果您直接调用这些函数,那么您的程序将无法在Win98上加载。

您可以使用LoadLibrary() / GetProcAddress()获取指向GetFileTime() / SetFileTime()的指针。在Win98上,这将失败,为您提供一个空指针,您可以测试并忽略它。在2000年及以后你会得到一个你可以使用的指针。

这是一种痛苦,但这是我所知道的唯一解决方案。

以下是获取UpdateLayeredWindow函数的示例(如果存在):

typedef BOOL (WINAPI* UpdateLayeredWinFunc) (HWND, HDC, POINT*, SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD);

UpdateLayeredWinFunc updateLayeredWindow = 0;
HMODULE user32Mod = GetModuleHandle (_T("user32.dll"));
updateLayeredWindow = (UpdateLayeredWinFunc) GetProcAddress (user32Mod, "UpdateLayeredWindow");

答案 1 :(得分:0)

我相信你会收到一条错误信息:“程序入口点(名称)不能位于(dll)”,类似于显示的那样:

example http://img266.imageshack.us/img266/3762/error2pm1.png

答案 2 :(得分:0)

您可以拨打FindFirstFile()而不是GetFileTime()。不过,我不知道SetFileTime()的另一种选择。