【问题标题】:Calling NT function on pre-NT system在 pre-NT 系统上调用 NT 函数
【发布时间】:2008-12-02 16:55:03
【问题描述】:

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

【问题讨论】:

    标签: c++ windows winapi dll


    【解决方案1】:

    如果你直接调用函数,那么你的程序在 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");
    

    【讨论】:

      【解决方案2】:

      我相信您会收到一条错误消息,类似于“程序入口点(名称)无法位于(dll)中”,类似于所示的:

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

      【讨论】:

        【解决方案3】:

        您可以调用FindFirstFile() 而不是GetFileTime()。不过,我不知道SetFileTime() 的替代品。

        【讨论】:

        • 根据我所做的研究,似乎没有,不过谢谢!
        猜你喜欢
        • 2011-05-21
        • 2016-09-14
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2012-04-21
        • 2012-09-11
        • 2021-06-28
        相关资源
        最近更新 更多