静态加载dll,动态加载dll及常见问题处理
2013-09-10 17:38
351 查看
静态加载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");中,没有给对函数名。又或者没有给对参数列表。
别的问题没有遇到过,暂时先不说了
将.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");中,没有给对函数名。又或者没有给对参数列表。
别的问题没有遇到过,暂时先不说了
相关文章推荐
- 静态loaddll的函数改成动态加载,小工具把大量的导出函数处理下
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
- 静态加载dll的问题
- MFC静态加载dll和动态加载dll示例
- 建立WIN32 DLL,并使用静态加载和动态加载
- 动态加载so库的实现方法与问题处理
- 静态加载dll和动态加载dll
- DLL的静态加载和动态加载
- 静态加载dll的问题
- DLL运行时动态加加载的问题
- 关于动态加载dll问题
- 动态链接库dll的 静态加载 与 动态加载
- webview 笔记二(android和js交互、包括链接跳转常见问题处理,加载监视,拦截Url等)
- Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
- 又拍云常见使用问题(如何将动态GIF转换成静态JPG)
- 动态链接库dll的 静态加载 与 动态加载
- 动态加载DLL的方法与注意的问题
- 动态加载DLL和静态加载DLL的步骤
- 静态与动态加载Dll [示例代码]
- 无法加载 DLL“dhnetsdk.dll”: 找不到指定的模块----问题处理