使用延迟加载DLL来加载指定目录下的DLL
2011-12-22 10:55
323 查看
问题来源:
我的应用程序需要用到D3DX9_41.dll(程序里用的静态加载),这个dll通常是把它放在根目录下,否则应用程序找不到dll
但是有一天,我需要把他放到别的目录,那么下面就是一个解决方案.
以VS2008开发环境为例:
具体方案:
1:项目属性-链接器-附加依赖项:..\..\Lib\MyDll.lib
2:项目属性-链接器-延迟加载的DLL:MyDll.dll
3:包含dll相关头文件后,调用SetDLLDirectory()设置路径,其他任何工作都不用做!
如此简单.....
经研究发现,延迟加载DLL方式比常规的LoadLibrary() + GetProcAddress()方式是有过之而无不及,
延迟加载DLL本质上是动态链接,其内部也是用LoadLibrary()以及GetProcAddress()来访问DLL接口,同时使用上和静态链接方式一样方便.
参考文章:
http://technet.microsoft.com/zh-cn/query/151kt790
http://hi.baidu.com/dick_china/blog/item/e82deeef47d1443563d09faf.html
我的应用程序需要用到D3DX9_41.dll(程序里用的静态加载),这个dll通常是把它放在根目录下,否则应用程序找不到dll
但是有一天,我需要把他放到别的目录,那么下面就是一个解决方案.
以VS2008开发环境为例:
具体方案:
1:项目属性-链接器-附加依赖项:..\..\Lib\MyDll.lib
2:项目属性-链接器-延迟加载的DLL:MyDll.dll
3:包含dll相关头文件后,调用SetDLLDirectory()设置路径,其他任何工作都不用做!
如此简单.....
经研究发现,延迟加载DLL方式比常规的LoadLibrary() + GetProcAddress()方式是有过之而无不及,
延迟加载DLL本质上是动态链接,其内部也是用LoadLibrary()以及GetProcAddress()来访问DLL接口,同时使用上和静态链接方式一样方便.
参考文章:
http://technet.microsoft.com/zh-cn/query/151kt790
http://hi.baidu.com/dick_china/blog/item/e82deeef47d1443563d09faf.html
相关文章推荐
- 关于使用EmguCV出现 “无法加载 DLL“cvextern”: 找不到指定的程序” 的解决方法
- 使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- C#使用SQLite出错:无法加载 DLL“SQLite.Interop.dll”,找不到指定的模块
- 关于VS的延迟加载dll的使用和理解
- 使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- 使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- 关于VS的延迟加载dll的使用和理解
- 关于使用EmguCV出现 “无法加载 DLL“cvextern”: 找不到指定的程序” 的解决方法
- Unity使用C#通过自定义Loader加载指定目录的Lua脚本
- C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- 在使用Microsoft Visual Studio Test Controller 2010进行测试时,报如下错误: System.DllNotFoundException: 无法加载 DLL“Microsoft.VisualStudio.QualityTools.RecorderBarBHO100.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
- C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中
- 关于使用EmguCV出现 “无法加载 DLL“cvextern”: 找不到指定的程序” 的解决方法
- MS-DOS下使用命令行注册指定目录下所有dll进注册表
- 前端性能优化:使用媒体查询加载指定大小的背景图片
- so使用原则(要么不支持,要么全部支持) 固定的运行平台 指定目录:System.load("/data/data/<package-name>/mydir/libmath.so");
- [置顶] hive 动态加载数据到指定分区,以及其他hive使用的技巧
- 使用CGLIB轻松实现延迟加载(Lazyload)
- Win7下使用VS2013编写的ActvieX在XP下注册提示:LoadLibrary("XXX.dll")失败-找不到指定的程序