【发布时间】:2008-12-02 16:55:03
【问题描述】:
所以我不做很多 Win32 调用,但最近我不得不使用 GetFileTime() 和 SetFileTime() 函数。现在虽然我的程序没有正式支持 Win98 及以下版本,但人们确实在那里使用它,我尽量保持它尽可能可用。我只是想知道这些功能在 NT 之前的系统中不存在会发生什么,它们是否会收到某种错误消息,例如,因为在这种情况下我将添加操作系统检查?谢谢
【问题讨论】:
所以我不做很多 Win32 调用,但最近我不得不使用 GetFileTime() 和 SetFileTime() 函数。现在虽然我的程序没有正式支持 Win98 及以下版本,但人们确实在那里使用它,我尽量保持它尽可能可用。我只是想知道这些功能在 NT 之前的系统中不存在会发生什么,它们是否会收到某种错误消息,例如,因为在这种情况下我将添加操作系统检查?谢谢
【问题讨论】:
如果你直接调用函数,那么你的程序在 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");
【讨论】:
我相信您会收到一条错误消息,类似于“程序入口点(名称)无法位于(dll)中”,类似于所示的:
example http://img266.imageshack.us/img266/3762/error2pm1.png
【讨论】:
您可以调用FindFirstFile() 而不是GetFileTime()。不过,我不知道SetFileTime() 的替代品。
【讨论】: