Используйте одну библиотеку DLL для импорта других библиотек во время выполнения - PullRequest
0 голосов
/ 16 апреля 2010

Я пишу библиотеку Win32 DLL, которую можно распространять. Я использую разные версии Windows API, потому что я хочу поддерживать функции Windows 7, но по-прежнему поддерживаю Windows 2000 (некоторые функции отключены). В настоящее время у меня есть MyLib2000.dll, MyLibXP.dll и MyLibVista.dll, и мое приложение выбирает, какую библиотеку загрузить во время выполнения. Мне нужен способ иметь одну DLL (MyLib.dll), которая хранит остальные три в себе и при загрузке извлекает правильную DLL из себя и загружает ее.

Я знаю, что это не лучший способ сделать это, поэтому предложения по другому способу сделать это приветствуются.

Ответы [ 2 ]

1 голос
/ 16 апреля 2010

Используйте задержку загрузки и внедрите ловушку уведомлений dliNotePreLoadLibrary, чтобы загрузить правильную версию вашей DLL. Предоставленная компоновщиком логика задержки загрузки затем извлечет все функции из любой загруженной вами DLL.

http://msdn.microsoft.com/en-us/library/z9h1h6ty(v=VS.100).aspx

Или используйте задержку загрузки и внедрите свои функции для проверки версии ОС перед вызовом любой функции, которая может не загружаться (так как она не существует в старой ОС).

1 голос
/ 16 апреля 2010

Почему бы просто не абстрагировать зависимости версии ОС на программном уровне, реализованные в виде чего-то вроде STLSoft комплект шаблонов функций dl_call () .

...