【发布时间】:2011-01-13 10:59:45
【问题描述】:
我正在编写一个 DLL 以插入另一个(第 3 方)应用程序。 DLL 将需要依赖另一组 DLL(出于许可原因,我无法静态链接)。
我希望我的 DLL 可以“xcopy-deployable”到任何目录。我也不想要求将此目录添加到路径中。
如果我只是以通常的方式构建 DLL,Windows 将拒绝加载 DLL,因为它找不到当前进程旁边的 DLL。
有没有什么好的方法可以帮助 Windows 定位 DLL?
回答一些问题:
- DLL 是用 C++ 编写的。
- 额外的 DLL 是 QT-dll。
- 我想将额外的 DLL 放在与我的插件 DLL 相同的文件夹中。我可以从
GetModuleFileName获取该文件夹的名称。 - 应用程序是 Firefox,DLL 是 PKCS#11 安全模块。
- 应用程序使用 DLL 的完整路径加载 DLL(用户在安装插件时提供)。
- 要求将 DLL 放置在 System32 中或应用程序旁边会起作用,但它有点混乱,可能会导致卸载程序出现问题。
-
LoadLibrary和GetProcAddress当然可以,但在我的情况下并不可行。我在其他 DLL 中使用了数百甚至数千种方法。我真的需要使用导入库。
我曾考虑在 DllMain 中使用延迟加载的 dll 和 SetDllDirectory。有人试过这样的吗?
【问题讨论】:
-
您使用的是什么技术? .net?
-
你的前提毫无意义而且被打破了。
-
您可以随时将 dll 放在 System32 文件夹中...
-
8 年后我仍然有同样的问题。显然没有人解决它。
-
@BenL 这个答案似乎很有希望:stackoverflow.com/a/36871768/5542。如果我还在处理这个问题,我会试一试。
标签: c++ windows dll loadlibrary