VC中DLL工程创建注意事项

本文介绍在使用MFC扩展DLL时如何正确地定义和导出类,包括使用AFX_EXT_CLASS宏及declspec(dllexport)和declspec(dllimport)的方式,并解释了这些定义之间的等价性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DLL三种类型  (使用共享MFC DLL的规则,带静态链接MFC的规则,MFC扩展DLL)

通常如果开发的DLL不是跨平台使用的,都是创建MFC扩展DLL,这样能最大限度的使用DLL。

DLL导出类通常要添加宏AFX_EXT_CLASS来定义:


class <span style="color:#ff6666;">AFX_EXT_CLASS</span> TranFileWriter
{
public:
	TranFileWriter(void);
	~TranFileWriter(void);
	void SaveTranFuncData(CString strTranFucFile,std::map<CString , std::vector<TranFunctionDataPtr>> &TsAnatomyData);
};


<span style="color:#ff6666;">#ifdef  MARKER_EXPORTS
#define MARKER_API _declspec(dllexport)
#else
#define MARKER_API _declspec(dllimport)
#endif</span>


class MARKER_API TranFileWriter
{
public:
	TranFileWriter(void);
	virtual ~TranFileWriter(void);
void SaveTranFuncData(CString strTranFucFile,std::map<CString , std::vector<TranFunctionDataPtr>> &TsAnatomyData);
};



这两种方式的定义是等价的;


#ifndef AFX_EXT_DATA
	#ifdef _AFXEXT
		#define AFX_EXT_CLASS       AFX_CLASS_EXPORT
		#define AFX_EXT_API         AFX_API_EXPORT
		#define AFX_EXT_DATA        AFX_DATA_EXPORT
		#define AFX_EXT_DATADEF
	#else
		#define AFX_EXT_CLASS       AFX_CLASS_IMPORT
		#define AFX_EXT_API         AFX_API_IMPORT
		#define AFX_EXT_DATA        AFX_DATA_IMPORT
		#define AFX_EXT_DATADEF
	#endif
#endif
其中在DLL工程中会定义宏AFXEXT来确保导出设置;



也可参考msdn的帮助说明:

https://msdn.microsoft.com/zh-cn/library/9xyb5w93(VS.80).aspx



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值