动态库DLL中类的使用

一、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)
#endif

class 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   //进程卸载


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值