依赖于其他DLL的插件DLL

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

我希望我的DLL能够“xcopy-deployable”到任何目录。 我也不想要求将这个目录添加到路径中。

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

有没有什么好的选择来帮助Windows找到DLL?


回答一些问题:

  • 该DLL是用C ++编写的。
  • 额外的DLL是QT-dll。
  • 我想将额外的DLL放在与我的插件DLL相同的文件夹中。 我可以从GetModuleFileName获取该文件夹的名称。
  • 该应用程序是Firefox,该DLL是一个PKCS#11安全模块。
  • 应用程序使用DL​​L的完整路径加载DLL(用户在安装插件时提供它)。
  • 要求将DLL放在System32中或应用程序旁边可以工作,但它有点混乱,并可能导致卸载程序出现问题。
  • LoadLibraryGetProcAddress当然会起作用,但在我的情况下并不可行。 我在其他DLL中使用了数百个,甚至数千个方法。 我真的需要使用导入库。
  • 我曾考虑过在DllMain中使用延迟加载的dll和SetDllDirectory 。 有没有人尝试过这样的事情?


    我可以想到3种方法。

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


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


    另一个选项是修改PATH变量。 有一个用于启动主应用程序的批处理文件,并设置PATH =%PATH%;%〜dp0。 这确保了最小的占地面积,运行后系统中不会留下额外的痕迹。

    链接地址: http://www.djcxy.com/p/44543.html

    上一篇: Plugin DLLs that depend on other DLLs

    下一篇: IIS ASP.NET MVC and dllimport calls lock the file preventing future deployment