Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在pre-NT系统上调用NT函数_C++_Windows_Winapi_Dll - Fatal编程技术网

C++ 在pre-NT系统上调用NT函数

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

所以我没有做很多Win32调用,但最近我不得不使用and函数。现在,尽管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)”的错误消息,类似于下面所示的错误消息:


您可以调用
FindFirstFile()
而不是
GetFileTime()
。不过,我不知道
SetFileTime()
还有什么替代方法。

根据我所做的研究,似乎没有替代方法,谢谢!