插件DLL依赖于其他DLL

时间:2010-02-05 09:44:02

标签: c++ windows dll loadlibrary

我正在编写一个DLL来插入另一个(第三方)应用程序。 DLL将需要依赖于另一组DLL(出于许可证原因,我无法静态链接)。

我希望我的DLL可以“xcopy-deployable”到任何目录。我也不想要求将此目录添加到路径中。

如果我只是以通常的方式构建DLL,Windows将拒绝加载DLL,因为它无法找到当前进程旁边的DLL。

是否有任何帮助Windows找到DLL的好选项?


回答一些问题:

  • DLL是用C ++编写的。
  • 额外的DLL是QT-dlls。
  • 我想将额外的DLL放在与我的插件DLL相同的文件夹中。我可以从GetModuleFileName获取该文件夹的名称。
  • 应用程序是Firefox,DLL是PKCS#11安全模块。
  • 应用程序使用DL​​L的完整路径加载DLL(用户在安装插件时提供它)。
  • 要求将DLL放在System32中或应用程序旁边可以正常工作,但它有点乱,可能会导致卸载程序出现问题。
  • LoadLibraryGetProcAddress当然会有效,但在我的情况下并不可行。我在其他DLL中使用了数百个(如果不是数千个)方法。我真的需要使用import-libraries。

我曾想过在DllMain中使用延迟加载的dll和SetDllDirectory。有人试过这样的事吗?

2 个答案:

答案 0 :(得分:4)

我可以想到3种方法。

  1. 将dll放在与应用程序相同的文件夹中(你不能这样做?)
  2. 使用运行时链接。 LoadLibrary()GetProcAddress()
  3. 使用清单http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx
  4. 但是如果dll与.exe不在同一文件夹中,你怎么知道它在哪里?忘了Windows不知道,怎么知道?

答案 1 :(得分:1)

您可以指定dll的路径作为LoadLibrary()的参数。