DelayLoading DLL и связанный файл .lib - PullRequest
2 голосов
/ 14 октября 2010

Я пытаюсь отложить загрузку wintrust.dll и crypt32.dll в моем приложении (они используются для выполнения проверки цифровой подписи / проверки издателя в DLL). Я использую VS2008. После добавления этих двух библиотек DLL в качестве записей в свойстве «Задержка загрузки» в разделе «Свойства компоновщика» в свойствах моего проекта я по-прежнему получаю предупреждения LNK4199 о том, что ничего не было загружено из DLL, и ошибки LNK2019 не могут разрешить такие символы, как WinVerifyTrust.

Добавление следующего в качестве записей в дополнительные зависимости облегчает эту проблему: crypt32.lib и wintrust.lib. Теперь у меня нет проблем со ссылками. Однако меня интересует, как мне убедиться, что это не связано со статической библиотекой? Я не хочу ссылаться на статическую библиотеку из-за возможных проблем с лицензированием. Я хочу динамически загружать библиотеки DLL, установленные в Windows, и надеялся, что DelayLoad поможет мне сделать это, не прибегая к вызовам функций LoadLibrary и GetProcAddress.

Будем весьма благодарны за любую информацию обо всех вариантах использования / ссылок библиотек!

Спасибо.

Ответы [ 4 ]

3 голосов
/ 14 октября 2010

Для них нет статического .lib. Библиотеки SDK всегда являются библиотеками импорта, а не статическими .libs, поскольку соответствующий API Windows находится в DLL. Не нужно беспокоиться об этом.

2 голосов
/ 14 октября 2010

Одним из инструментов, который может помочь вам определить, связаны ли вещи так, как вы ожидаете, является DependecyWalker: http://www.dependencywalker.com/ - в частности, в случае отложенной загрузки он помечает их специальным символом.

2 голосов
/ 14 октября 2010

Задержка загрузки не освобождает вас от необходимости ссылаться на файл lib. Обычно библиотеки DLL загружаются сразу после запуска приложения. Задержка загрузки просто задерживает это до тех пор, пока вы в первый раз не вызовете функцию из этой DLL. В любом случае вам нужно создать ссылку на файл lib, чтобы компоновщик мог убедиться, что вызываемые вами функции действительно присутствуют в DLL.

Если вы не хотите ссылаться на файлы lib, ваш единственный выход - использовать LoadLibrary и GetProcAddress.

0 голосов
/ 14 октября 2010

Возможно, вы захотите взглянуть на методы Win32 API LoadLibrary и GetProcAddress .

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