Сменные DLLs, которые зависят от другого DLLs

Я пишу DLL для включения другого (третья сторона) приложение. DLL должен будет зависеть от другого набора DLLs (по причинам лицензии, которые я не могу связать статически).

Я хотел бы, чтобы мой DLL был "развертываем на xcopy" на любом каталоге. Я также хотел бы не потребовать добавления этого каталога к пути.

Если я просто создам DLL обычный путь, то Windows откажется загружать DLL, так как он не может найти DLLs рядом с текущим процессом.

Есть ли какие-либо хорошие варианты для помощи Windows определить местоположение DLL?


Отвечать на некоторые вопросы:

  • DLL записан в C++.
  • Дополнительные DLLs являются QT-dlls.
  • Я хотел бы поместить дополнительный DLLs в ту же папку как мой сменный DLL. Я могу получить название той папки от GetModuleFileName.
  • Приложение является Firefox, DLL является модулем безопасности PKCS#11.
  • Загрузки приложения DLL с помощью полного пути для DLL (пользователь предоставляет его при установке плагина).
  • Требование, чтобы DLLs быть помещенным в System32 или рядом с приложением работал бы, но это немного грязно и могло вызвать проблемы с деинсталляторами.
  • LoadLibrary и GetProcAddress конечно, работал бы, но не действительно выполним в моем случае. Я использую сотни, если не тысячи, методов в другом DLLs. Я действительно должен использовать библиотеки импорта.

Я думал об использовании загруженного задержкой dlls, объединенного с SetDllDirectory в DllMain. Кто-либо попробовал что-нибудь как это?

9
задан Rasmus Faber 5 February 2010 в 01:11
поделиться

2 ответа

Я могу придумать 3 способа.

  1. поместить dlls в ту же папку, что и ваше приложение (вы не можете это сделать?)
  2. Использовать runtime linking. LoadLibrary() и GetProcAddress()
  3. Используйте манифест http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx

Но если dll не находится в той же папке, что и .exe, как вы узнаете, где она? Забудьте о том, что Windows не знает, как вы узнаете?

.
4
ответ дан 3 November 2019 в 07:13
поделиться

вы можете указать путь к dll в качестве параметра LoadLibrary ().

1
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: