运行时加载DLL
来源:互联网 发布:手机上淘宝网怎么付款 编辑:程序博客网 时间:2024/06/06 05:49
使用DLL有两种方法,一种是启动时加载DLL,另一种就是运行时加载DLL,之前的一篇博文用的就是启动时加载DLL,现在来看看运行时是如何加载DLL的还是之前的那个项目,只不过添加了两个函数(W版本的和A版本的)
这是源文件
.cpp
# include<Windows.h># include"标头.h"//Dll入口函数就是DllMain,DllMain既是入口点,也是出口点int WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, PVOID pvReserved){ switch (fdwReason) { case DLL_PROCESS_ATTACH: //(加载DLL) //将dll附加到进程的地址空间里,之后dll是作为一个独立的线程执行的 MessageBox(NULL, TEXT("DLL被加载了!"), TEXT("DLL"), MB_OK); break; case DLL_THREAD_ATTACH: //新建线程 //略 break; case DLL_THREAD_DETACH: //线程退出 ,退出是线程先退出 //略 break; case DLL_PROCESS_DETACH: //释放DLL //略 break; } return TRUE;}//任何一个dll中的函数前都要加extern "C" _declspec(dllexport),至少要加_declspec(dllexport)(意思是声明为dll的导出函数,只有导出函数//才可以被其他的项目在调用该dll时调用,不声明的话该函数只能在该dll内部调用,无法在外部被调用)//如果是被c++调用,还要加上extern "C",c调用就不加,所以在头文件里利用宏来处理//=====================启动时加载DLL:使用h文件和lib文件=============================//使用h文件和lib文件(别忘了dll文件)EXPORT BOOL CALLBACK funA(HDC hdc,PRECT pRc,PCSTR pString)//测试里就可以调用该函数{ int iLength; SIZE size;//保存字符串尺寸(高度和宽度)的结构 iLength = lstrlenA(pString);//字符串长度 GetTextExtentPoint32A(hdc, pString, iLength, &size); return TextOutA(hdc, (pRc->right - pRc->left - size.cx) / 2, (pRc->bottom - pRc->top - size.cy) / 2, pString, iLength);}EXPORT _declspec(dllexport) BOOL CALLBACK funW(HDC hdc,PRECT pRc,PCWSTR pString){ int iLength; SIZE size;//保存字符串尺寸(高度和宽度)的结构 iLength = lstrlenW(pString);//字符串长度 GetTextExtentPoint32W(hdc, pString, iLength, &size); return TextOutW(hdc, (pRc->right - pRc->left - size.cx) / 2, (pRc->bottom - pRc->top - size.cy) / 2, pString, iLength);}//===============================================================================//=======运行时加载DLL: 使用LoadLibrary(),GetProcessAddress()======================EXPORT DWORD DemoA(){ MessageBoxA(NULL, "这是动态链接库的函数", "DLL", MB_OK); return 0;}EXPORT DWORD DemoW(){ MessageBoxW(NULL, L"这是动态链接库的函数", L"DLL", MB_OK); return 0;}//===============================================================================
然后重新生成一下该项目,然后新建一个项目测试一下,
第一个按钮加载DLL,第二个调用DLL里的函数,第三个释放DLL
这就是运行时加载DLL
0 0
- 运行时加载DLL
- dnn 加载dll 报运行时错误
- 初次接触vc 运行时动态加载DLL
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- 运行时 DLL 装载
- 运行时DLL注意!
- 非MFC的DLL的生成和运行时动态加载
- 怎么写bat文件来运行或加载.dll 文件
- 获取被加载dll路径和应用程序运行目录
- 加载 DLL 时出错: 'RegExp'
- 运行exe时找不到dll
- VS2010 运行时找不到DLL
- 运行时加载控件!!!
- dll加载
- 加载DLL
- 而立之年,未开始的创业路(暨 2016年总结)
- 如何让Machine Driver在Rancher中无比简单易用
- 数据结构——图—最小生成树(普里姆算法和克鲁斯卡尔算法)
- 二项树及二项队列
- [Java基础]接口能否被实例化以及匿名内部类
- 运行时加载DLL
- [51nod 1223]分数等式的数量
- 【C#】52. 使用Flatten方法处理并行任务抛出的异常
- vue2.0(新手)第一个坑--do not mount Vue to <body>!!!
- matlab-基于IBM服务器”VideoReader没有注册类“解决全过程
- Python install ggplot in Rodeo
- 导入第三方框架ReactiveCocoa经常出现的问题 如出现Could not build module ‘ReactiveCocoa’
- 磁盘调度算法(FCFS&&SSTF)
- 正确加载 Javascript 和 CSS 到 WordPress