Dll中类的安全性导出

问题:通常我们在dll中要导出一个类都是直接在导出头文件声明该类的方法及属性,这样一来别人只要拿到我们的导出头文件便可以由此猜测出很多实现方面的信息。

安全的做法:使用虚类,导出头文件中只保留虚类,将需要导出的函数放在虚类中而并无其他信息,然后在在其他文件中继承并实现虚类的方法,而将类指针作为接口输出。

具体实现例子:

      导出头文件.h

#ifdef _EXPORT
#define DLLMODULETYPE  __declspec(dllexport)
#else
#define DLLMODULETYPE __declspec(dllimport)
#endif

class CBase   //虚类
{
public:
virtual void test() = 0;   //需要导出的方法虚函数
};
extern "C"  DLLMODULETYPE CBase* _stdcall ExportCall();   //导出接口函数


      继承并实现虚类的文件.h

class CMyClass:public CBase
{
public:
CMyClass(void);
~CMyClass(void);
virtual void tRead();           //实现虚函数
};

继承并实现虚类的文件.cpp

void CMyClass::tRead()
{
printf("sucessful!\n");
}

CBase* _stdcall exportcall() //导出函数的实现
{
return new CMyClass;
}


这样,使用者的可见类就只有虚类CBase而看不到实现类CMyClass

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值