动态库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  
//进程卸载


0 0
原创粉丝点击