c – 依赖于其他DLL的插件DLL

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

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

解决方法:

我可以想到三种方式.

>将dll放在与应用程序相同的文件夹中(你不能这样做?)
>使用运行时链接. LoadLibrary()和GetProcAddress()
>使用清单http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx

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

上一篇:c – 使用LoadLibrary加载DLL


下一篇:c# – DllImport vs LoadLibrary,最好的方法是什么?