1 首先建立MFC的dll的工程,如图:
2 选择标准DLL选项,如图:
3 点击finish按钮结束项目的定义。
4 导出类的定义
#include "def.h"
#ifdef _USRDLL
class __declspec(dllexport) CExportSerialNum
#else
class __declspec(dllimport) CExportSerialNum
#endif
{
public:
CExportSerialNum();
~CExportSerialNum();
public:
// 呈现窗口
stSerialNum showDlg();
// 设置当前INI文件的编号
void SetCurIniNum(CString iniSerialNum);
// 得到当前序列号
stSerialNum GetCurSerialNum();
// 设置当前序列号到指定的模板文件编号Ini中
void SaveCurSerialNum(CString cstrCurTempfileNo ,const stSerialNum& SerialNum);
};
#ifdef _USRDLL
__declspec(dllexport) CExportSerialNum ExportSerialNum;
#else
__declspec(dllimport) CExportSerialNum ExportSerialNum;
#endif
5 导出接口的定义
#include
using namespace std;
struct stSvrInfo
{
string sIp;
unsigned short nPort;
};
struct stTempFileInfo
{
string TempFilePath;
};
class CTcpSvrNotifyInf{
public:
/*
* 当接受客户端的连接 nError:0 成功连接 -1 连接失败
*/
virtual void onAccept(int nError) = 0;
/*
* 当收到客户端发送的数据,cstrTmpName:为模板名 ,如01、02
*/
virtual void onUpdateData(CString cstrTmpName) = 0;
/*
* 当客户端连接关闭了
*/
virtual void onClientClosed() = 0;
};
class CExportInf{
public:
/*
* showDlg: 显示对话框,返回值 1: 点击IDOK 0:点击取消
*/
virtual int showDlg() = 0;
virtual stSvrInfo GetSvrInfo() = 0;
virtual stTempFileInfo GetTempFileInfo() = 0;
virtual void SetTcpSvrNotifyInf(CTcpSvrNotifyInf* pTcpSvrNotifyInf) = 0;
virtual bool StartSvr(const stSvrInfo& SvrInfo) = 0;
virtual bool ReStartSvr(const stSvrInfo& SvrInfo) = 0;
virtual void StopSvr() = 0;
virtual void Destory() = 0;
};
#ifdef _USRDLL
#define EXPORTINF __declspec(dllexport)
#else
#define EXPORTINF __declspec(dllimport)
#endif
EXPORTINF CExportInf* CreateExportInf();
注意导出资源时,一定要记得在导出资源时加上这行:
AFX_MANAGE_STATE(AfxGetStaticModuleState());// 切换DLL模态的状态
if (IDOK == dlg.DoModal())
return 1;
else
return 0;