Название: вызов WinAPI функций, которые есть не во всех системах Отправлено: kambala от Март 25, 2012, 22:42 Здравствуйте. Как правильно вызывать функции, которые есть не во всех системах? Сейчас я использую GetProcAddress(), но глаз просто не нарадуется такому коду :)
Вот например, мне нужно задать для приложения Application User Model ID. Для этого служит функция SetCurrentProcessExplicitAppUserModelID(), которая есть только в виндоус 7 и выше: Код
Может существуют иные подходы, которые позволяют вызывать функции напрямую? Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Igors от Март 25, 2012, 23:06 GetProcAddress (dlsym на OSX) кажется милым и родным после столкновения со страхомудием MSVC манифеста. Как бы GetProcAddress вообще не отобрали (я об этом переживаю)
Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Zeka13 от Октябрь 07, 2012, 13:44 используйте функцию определения версии ОС в if(), разве не очевидно?
Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Bepec от Октябрь 07, 2012, 14:24 ++ к Зеке.
GetWindowsMajorVersion + GerWindowsMinorVersion; Где то я даже видел краткий справочник по версиям :) Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: kambala от Октябрь 07, 2012, 15:29 тогда код не скомлипируется на ОС, где нету таких функций. например код вызывает функцию из винды 7 по возможности, а компиляция происходит на ХР. а вот динамический резолв из длл в таком случае прокатит.
Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Bepec от Октябрь 07, 2012, 15:31 Тогда if switch твой удел. Хотя в упор не понимаю. Если программа должна работать на высшей системе и поддерживать (ПОДДЕРЖИВАТЬ) низшую версию, то компилиться она должна именно на высшей.
Ты тогда дефайны запихай. Где то видел вроде дефайн на XP, но не помню точно. Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: kambala от Октябрь 07, 2012, 15:38 Если программа должна работать на высшей системе и поддерживать (ПОДДЕРЖИВАТЬ) низшую версию, то компилиться она должна именно на высшей. а где такой закон написан?если использовать дефайны, то программа, собранная на ХР, не будет иметь поддержки специфических функций для высших версий ОС. ты не понимаешь разницы между compile-time check и run-time check? Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Bepec от Октябрь 07, 2012, 15:50 Я тебе о чём и говорю. А про "высшую-нижнюю" вроде бы из какого то курса по программированию.
И представь - оно реально работает :D А так у тебя пути не остаётся. Или if или отказ от XP сборки. Ибо без функций у тебя всё не скомпилится, а с функциями тебе не подходит ибо их не будет. PS я понимаю. Так же я понимаю что использовать ф-ции высшей системы без самой высшей системы врядли получится. Потому дллка, адрес, проверка, всё круто. Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Igors от Октябрь 07, 2012, 16:31 Я тебе о чём и говорю. А про "высшую-нижнюю" вроде бы из какого то курса по программированию. Вижу что человек далек от Mac - там быстро отучат от кратких курсов :)И представь - оно реально работает :D Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: V1KT0P от Октябрь 07, 2012, 16:38 И представь - оно реально работает :D Интересно как оно работает, по идеи весь импорт должен быть получен на этапе старта и если вдруг в библиотеки не обнаруживается нужная функция то должна произойти такая ошибка:Цитировать Точка входа в процедуру FUNCTION_NAME не найдена в библиотеке DLL LIBRARY_NAME. Вот только что сделал маленький пример, консольное приложение и две версии библиотеки одна с двумя функциями, другая с одной. Если первая возвращает число 2, то можно вызывать вторую, если 1 то не вызываем. Так вот с первой все работает, со второй как и предполагал "Точка входа не найдена". При чем эта ошибка появляется до выполнения функции main.Если я чего-то не понимаю то просветите пожалуйста, очень интересно. Название: Re: вызов WinAPI функций, которые есть не во всех системах Отправлено: Alex Custov от Октябрь 07, 2012, 20:12 Если программа должна работать на высшей системе и поддерживать (ПОДДЕРЖИВАТЬ) низшую версию, то компилиться она должна именно на высшей. Бред, совместимость если и есть, то снизу вверх, а никак не наоборот. |