Вызов функции NT в системе до NT - PullRequest
6 голосов
/ 02 декабря 2008

Так что я не делаю много вызовов Win32, но недавно мне пришлось использовать функции GetFileTime() и SetFileTime(). Теперь, хотя Win98 и ниже официально не поддерживаются в моей программе, люди все равно используют его там, и я стараюсь сделать его максимально удобным для использования. Мне было просто интересно, что произойдет, поскольку эти функции не существуют в системах, предшествующих NT, получат ли они какое-либо сообщение об ошибке, например, потому что в этом случае я добавлю проверку ОС? Спасибо

Ответы [ 3 ]

8 голосов
/ 02 декабря 2008

Если вы вызываете функции напрямую, ваша программа не будет загружаться на 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");
0 голосов
/ 03 декабря 2008

Вы можете позвонить FindFirstFile() вместо GetFileTime(). Я не знаю альтернативы для SetFileTime(), однако.

0 голосов
/ 02 декабря 2008

Я полагаю, вы получаете сообщение об ошибке в строке «Точка входа в процедуру (имя) не может быть расположена в (dll)», как показано на рисунке:

пример http://img266.imageshack.us/img266/3762/error2pm1.png

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...