暂时还不知道如何显示加载整个类,现在先提供隐式加载方法。
1、导出整个类或仅导出类中的部分成员函数。
导出整个类:在类定义的关键词class后加_declspec(dllexport)
导出成员函数:在成员函数定义前加_declspec(dllexport)
2.dll代码
头文件inc.h
extern "C" class __declspec(dllexport) CKeyHand
{
public:
CKeyHand(int i):m_ix(i)
{
}
int GetKey();
void print();
private:
int m_ix;
};
*.cpp实现:
int CKeyHand::GetKey()
{
return m_ix;
}
void CKeyHand::print()
{
cout<<"m_ix="<<GetKey();
}
3.调用,lib和dll文件都需要
【注意】:此时需要加上inc.h头文件,不然会无法识别类。
#include "inc.h"
#pragma comment(lib,".\\Debug\\MemDll.lib")
CKeyHand kh(10);
kh.print();
4.截图
【续】:显示加载导出类
本人用的这种方式有点取巧,但是可以起到隐藏信息的作用。
extern "C" __declspec(dllexport) CKeyHand* GetKeyHandle()
{
CKeyHand* key = new CKeyHand(15);
if (NULL==key)
{
return NULL;
}
return key;
}
方式是在dll.cpp中加一个导出函数,函数返回一个创建的类指针。
_keyhandle = (GetKeyHandle)WRITEDATAFUN(hmodule,"GetKeyHandle");
if (_keyhandle)
{
CKeyHand* phand = _keyhandle();
phand->print();
delete phand;
phand = NULL;
}
函数指针就不写了,直接上调用的代码,用完记得delete,不然会有内存泄露。