静态加载dll,动态加载dll及常见问题处理
来源:互联网 发布:河南省卫生网络直报 编辑:程序博客网 时间:2024/06/06 12:27
静态加载dll(原材料:dll.dll,dlDef.h,dll.lib)
将.lib加入工程,dll丢到exe的位置。之后调用函数的方式就是::FuncName(veriable, veriable,....,veriable)
动态加载dll(原材料:dll.dll,dllDef.h)
第一步:得到句柄
将dll丢到exe位置,然后调用
string fileName = “...";
HMODULE hDll = LoadLibraryEx(fileName.c_str(),0,LOAD_WITH_ALTERED_SEARCH_PATH);
// 用Ex函数的好处是,当多个dll之间互相依赖时,LoadLiabrary可能找不到依赖项,导致无法加载。
第二步:声明函数指针
int (__cdecl *FuncName)(char* ,char* ,char*); // 这里的参数设置需要和”dllDef.h“ 一致
FuncName= (int (_cdecl*)(char* ,char* ,char* ))GetProcAddress((HMODULE)hDll,"FuncName");
第三步:调用函数
int ret = FuncName(variable 1,variable 2,variable 3);
动态加载dll见到过的问题及解决方法
1.hDll == NULL,dll加载失败
可能原因:1.dll路径没弄对。
2.dll的依赖项没有放进去,看是不是缺项的方法是用Depends工具打开该dll,看看是不是有些依赖项是黄的。若缺,需要补上,直到dll依赖列表中无异常颜色为止。
2.1 根据缺失情况:若是MSVCR80.DLL,MFC80.DLL之类的,不需下载,在自己的vs的安装目录下面就有,搜索就能得到。
2.2 自己定义的dll缺失了,这个就要自己加了。
3. 如果上面两类原因都排除了,很可能是自己写的其他依赖dll没有及时更新,或者MFC80.DLL之类的没找对。后者需要根据自己机器型号来找。如32位系统就找带x86字样目录下的dll
2.FuncName == NULL
可能是在第一步的GetProcAddress((HMODULE)hDll,"FuncName");中,没有给对函数名。又或者没有给对参数列表。
别的问题没有遇到过,暂时先不说了
- 静态加载dll,动态加载dll及常见问题处理
- 静态加载dll和动态加载dll
- 静态加载dll和动态加载dll
- 静态加载dll和动态加载dll
- 动态(静态)加载DLL注意
- DLL的静态加载和动态加载
- 动态加载DLL和静态加载DLL的步骤
- 动态加载DLL和静态加载DLL的步骤
- vc静态加载dll和动态加载dll
- vc静态加载dll和动态加载dll
- MFC静态加载dll和动态加载dll示例
- 动态库DLL加载方式-静态加载和动态加载
- 动态库DLL加载方式-静态加载和动态加载
- 动态库DLL加载方式-静态加载和动态加载
- DLL加载方式-动态vs静态
- 静态与动态加载Dll [示例代码]
- 静态链接与动态加载DLL
- 动态链接库dll的 静态加载 与 动态加载
- mac os开发资料
- 五、代理模式
- 判断字符串是否为IP地址
- oracle 常用
- pygame初体验——3D效果的雪景
- 静态加载dll,动态加载dll及常见问题处理
- 12个有趣的C语言问答
- 命名管道文件的使用
- 将 ASP.NET MVC3 Razor 项目部署到虚拟主机中
- Linux下部署nginx
- 新导入项目可能会出现的错误
- IIS部署asp.net报404错误
- MULE学习笔记1
- Java常用类