动态库DLL中类的使用
来源:互联网 发布:php视频教程百度云 编辑:程序博客网 时间:2024/05/17 17:59
一、DLL中类的导出
在类名称前增加 _declspec(dllexport)定义,例如:
class _declspec(dllexport) CMath{
....
};
通常使用预编译开关切换类的导入导出定义,例如:
#ifdef DLLCLASS_EXPORTS
#define EXT_CLASS _declspec(dllexport)//DLL
#else
#define EXT_CLASS _declspec(dllimport)//使用者
#endif
class EXT_CLASS CMath{
...........
};
二、使用DLL中的类
1、导入DLL的lib
2、类的定义
3、使用类
例子代码如下:
DLL类源码
.h文件
#ifndef _DLL_CLASS_#define _DLL_CLASS_//定义导入,导出宏开关.#ifdef DLLCLASS_EXPORT#define EXT_CLASS _declspec(dllexport)#else#define EXT_CLASS _declspec(dllimport)#endifclass EXT_CLASS CMath{public:int Add(int num1,int num2);int Sub(int num1,int num2);};#endif
.cpp文件
#define DLLCLASS_EXPORT#include "DllClass.h"#include <WINDOWS.H>#include <CSTDIO>BOOL CALLBACK DllMain(HINSTANCE hInst,DWORD fDwReason,VOID* Reserve){switch(fDwReason){case DLL_PROCESS_ATTACH:{//初始化工作.printf(__TEXT("DllClass is loading.\r\n"));}break;case DLL_PROCESS_DETACH:{//善后处理工作.printf(__TEXT("DllClass is unloading.\r\n"));}break;case DLL_THREAD_ATTACH:{}break;case DLL_THREAD_DETACH:{}break;}return 1;}int CMath::Add(int num1,int num2){return num1+num2;}int CMath::Sub(int num1,int num2){return num1-num2;}
我们看到上面的DLL类中包含了DllMain(...)函数,这个函数为DLL动态库的程序入口。
入口程序不是DLL必须的,常用于DLL内部初始化或善后处理。
BOOL WINAPI DllMain(
HINSTANCE hinstDLL,//动态库实例句柄
DWORD fdwReason, //初调用原因
LPVOID lpvReserved //保留值
); 返回TRUE,表示动态库加载成功。
DllMain(.... ) 动态库的加载或卸载时会被调用。例如:使用LoadLibrary或FreeLibrary时会被调用。
fdwReason取值如下:
#define DLL_PROCESS_ATTACH 1 //进程加载
#define DLL_THREAD_ATTACH 2 //线程加载
#define DLL_THREAD_DETACH 3 //线程卸载
#define DLL_PROCESS_DETACH 0 //进程卸载
- 动态库DLL中类的使用
- 一般使用动态链接库DLL中类的方法
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- delphi中动态链接库dll的使用(转载)
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- VC++中DLL(动态链接库)使用的若干问题
- 动态库DLL中能不能使用CString
- DLL中加载其它DLL使用LoadLibrary加载动态库失败的解决办法
- 动态 DLL的使用
- 动态链接库(DLL)的使用
- 动态链接库dll文件的使用
- Windows动态链接库DLL的使用
- 动态库Dll的创建和使用
- (10.3.1)产品经理应该先写需求文档还是先画原型?
- 打麻将怎么控牌╭∮【在线演示QQ:194714506】
- 打麻将怎样控牌∩☉【在线演示QQ:194714506】
- MySql中的varchar类型
- 打麻将控牌绝技▅◇【在线演示QQ:194714506】
- 动态库DLL中类的使用
- POJ2488 -- POJ1154-- DFS
- 打麻将能控牌吗↑◥【在线演示QQ:194714506】
- 单人操作控牌→▲【在线演示QQ:194714506】
- 解决:分区调整改变造成ubuntu/win7不能正常启动的问题
- Oracle基础(九):数据备份与恢复、死锁等
- (10.3.2)PRD中产品功能点及其描述自查清单
- CSS 样式表权限大小比较
- 单人操作控牌技巧◇▂【在线演示QQ:194714506】