Я собираю свою собственную DLL, состоящую из нескольких .o
файлов. Один из файлов .o
имеет функцию, которая вызывает SHLoadLibraryFromItem
, которая поддерживается только в Windows 7. Эта функция никогда не вызывается, если только приложение, использующее DLL, не запущено в Windows 7. (Да, я уверен.)
Однако при запуске приложения в более старой версии Windows (скажем, XP) происходит сбой всего приложения при запуске с ошибкой «Указанная процедура не найдена». Хотя в ошибке не указано, какую процедуру не удалось найти, если я закомментирую вызов SHLoadLibraryFromItem
, то все работает нормально.
Вопросы:
- Почему Windows пытается найти
SHLoadLibraryFromItem
, хотя она не вызывается в XP?
- Есть ли способ заставить Windows , а не сделать это, то есть найти
SHLoadLibraryFromItem
только при запуске Windows 7, т.е. какое-то ленивое связывание?
- Если нет, как лучше обойти это?
Единственный способ обойти это, я могу придумать:
- Используйте
LoadLibrary
, чтобы загрузить Windows DLL, в которой находится SHLoadLibraryFromItem
, и используйте GetProcAddress
, чтобы вручную получить адрес в указателе на функцию, и используйте указатель для вызова SHLoadLibraryFromItem
вместо этого?
- Имеется две библиотеки DLL: одна содержит функции, поддерживаемые для Windows 7, которые будут загружаться только при работе в Windows 7.
Есть еще идеи? Я бы действительно предпочел ленивую привязку, как упоминалось выше.
Обновление
ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ, ЧТО Я НАСТОЯЩИЙ НАПИСАЛ. Я ясно заявил в первом абзаце, что SHLoadLibraryFromItem
является , а не вызывается, если я не знаю, что приложение фактически работает в Windows 7.
Приложение аварийно завершает работу, только когда DLL загружена .