#cpp #windows
При запуске программы в Windows XP вылезает окошко с сообщением: Точка входа в процедуру InitializeConditionVariable не найдена в библиотеке Kernel32.dll. Чем лечить? Доступ к коду программы есть, могу написать функцию, реализующую тот же функционал, используя SetEvent(). Как сделать, чтобы в зависимости от ОС вызывалась та или иная функция? На мой взгляд, это самое простое решение.
Ответы
Ответ 1
Сделать обертку для condition variable (если ее еще нет), а функцию InitializeConditionVariable вызывать через GetProcAddress, а если ее нет, использовать аналоги Правда, как утверждают разработчики Chromium, сделать правильную реализацию CV под WinXP тяжело, и оно будет работать не быстро. Можете посмотреть на github Они используют GetProcAdress для получения функций и идиому pimpl для выбора той или иной реализации (для Vista или XP)Ответ 2
Condition Variable это новшество, которого нет в XP. Они появились с Vista. Таким образом лечить это можно только хирургически - заменить condition variable на что-то другое, или использовать условную компиляцию - для XP одно, для Vista+ другое. А ещё лучше использовать std::condition_variable полностью отказавшись от платформо-зависимого решения.Ответ 3
GetVersion() и в зависимости от возвращаемого значения вызывается тот или иной код. Только вам придется отказаться от импорта InitializeConditionVariable, а вместо этого искать (загружать) DLL, получать из нее адрес нужной функции и вызывать ее. Правда, MS не рекомендует GetVersion() теперь...
Комментариев нет:
Отправить комментарий