c++ - 依赖于其他 DLL 的插件 DLL

标签 c++ windows dll loadlibrary

我正在编写一个 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 中或应用程序旁边可以工作,但它有点困惑并且可能导致卸载程序出现问题。
  • LoadLibraryGetProcAddress 当然可以,但在我的情况下并不可行。我在其他 DLL 中使用了数百个(如果不是数千个)方法。我真的需要使用导入库。

我考虑过将延迟加载的 dll 与 SetDllDirectory 结合使用在 DllMain 中。有没有人尝试过这样的事情?

最佳答案

我可以想到 3 种方法。

  1. 将 dll 放在与您的应用程序相同的文件夹中(您不能这样做吗?)
  2. 使用运行时链接。 LoadLibrary()GetProcAddress()
  3. 使用 list http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx

但是如果 dll 与 .exe 不在同一个文件夹中,您怎么知道它在哪里?忘了 Windows 不知道吧,怎么知道的?

关于c++ - 依赖于其他 DLL 的插件 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206270/

相关文章:

c++ - 程序中的每一行(变量声明除外)最终都会使用至少一个系统调用吗?

c - CreateSemaphore() API 中的 lmaxcount 参数有什么用?

windows - 用于将 psql 查询输出存储到变量中的批处理文件

c - Microsoft Visual Studio 中的外部链接问题

c++ - Windows 上 Mingw 的 DLL 依赖项

c++ - 从不同线程调用 MPI_Init 是否安全?

c++ - 编译器可以生成自修改代码吗?

c++ - 学习C++语言

windows - 为变量分配多个驱动器号

java - JNI2OpenCV 中缺少库?