C++ 在pre-NT系统上调用NT函数
所以我没有做很多Win32调用,但最近我不得不使用and函数。现在,尽管Win98及以下版本在我的程序中不受官方支持,但人们还是会在那里使用它,我会尽可能保持它的可用性。我只是想知道,如果这些函数在NT之前的系统中不存在,会发生什么,它们会收到某种错误消息吗?例如,因为在这种情况下,我将添加一个操作系统检查?谢谢如果您直接调用函数,那么您的程序将不会加载到Win98上 您可以使用C++ 在pre-NT系统上调用NT函数,c++,windows,winapi,dll,C++,Windows,Winapi,Dll,所以我没有做很多Win32调用,但最近我不得不使用and函数。现在,尽管Win98及以下版本在我的程序中不受官方支持,但人们还是会在那里使用它,我会尽可能保持它的可用性。我只是想知道,如果这些函数在NT之前的系统中不存在,会发生什么,它们会收到某种错误消息吗?例如,因为在这种情况下,我将添加一个操作系统检查?谢谢如果您直接调用函数,那么您的程序将不会加载到Win98上 您可以使用LoadLibrary()/GetProcAddress()获取指向GetFileTime()/SetFileTime
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)”的错误消息,类似于下面所示的错误消息:
您可以调用
FindFirstFile()
而不是GetFileTime()
。不过,我不知道SetFileTime()
还有什么替代方法。根据我所做的研究,似乎没有替代方法,谢谢!