VC++动态链接库编程之MFC扩展 DLL.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:10 大小:70KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

VC++动态链接库编程之MFC扩展 DLL.doc

VC++动态链接库编程之MFC扩展DLL.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VC++动态链接库编程之MFC扩展DLL资料引用:http://www.knowsky.com/395359.htmlDLL类型入口函数非MFCDLL编程者提供DllMain函数MFC规则DLLCWinApp对象的InitInstance和ExitInstanceMFC扩展DLLMFCDLL向导生成DllMain函数对于MFC扩展DLL,系统会自动在工程中添加如下表所示的宏,这些宏为DLL和应用程序的编写提供了方便。像AFX_EXT_CLASS、AFX_EXT_API、AFX_EXT_DATA这样的宏,在DLL和应用程序中将具有不同的定义,这取决于_AFXEXT宏是否被定义。这使得在DLL和应用程序中,使用统一的一个宏就可以表示出输出和输入的不同意思。在DLL中,表示输出(因为_AFXEXT被定义,通常是在编译器的标识参数中指定/D_AFXEXT);在应用程序中,则表示输入(_AFXEXT没有定义)。宏定义AFX_CLASS_IMPORT__declspec(dlleXPort)AFX_API_IMPORT__declspec(dllexport)AFX_DATA_IMPORT__declspec(dllexport)AFX_CLASS_EXPORT__declspec(dllexport)AFX_API_EXPORT__declspec(dllexport)AFX_DATA_EXPORT__declspec(dllexport)AFX_EXT_CLASS#ifdef_AFXEXTAFX_CLASS_EXPORT#elseAFX_CLASS_IMPORTAFX_EXT_API#ifdef_AFXEXTAFX_API_EXPORT#elseAFX_API_IMPORTAFX_EXT_DATA#ifdef_AFXEXTAFX_DATA_EXPORT#elseAFX_DATA_IMPORT6.2MFC扩展DLL导出MFC派生类在这个例子中,我们将产生一个名为“ExtDll”的MFC扩展DLL工程,在这个DLL中导出一个对话框类,这个对话框类派生自MFC类CDialog。使用MFC向导生成MFC扩展DLL时,系统会自动添加如下代码:staticAFX_EXTENSION_MODULEExtDllDLL={NULL,NULL};extern"C"intAPIENTRYDllMain(HINSTANCEhInstance,DWorddwReason,LPVOIDlPReserved){//RemovethisifyouuselpReservedUNREFERENCED_PARAMETER(lpReserved);//说明:lpReserved是一个被系统所保留的参数,对于隐式链接是一个非零值,对于显式链接值是零if(dwReason==DLL_PROCESS_ATTACH){TRACE0("EXTDLL.DLLInitializing!\n");//ExtensionDLLone-timeinitializationif(!AfxInitExtensionModule(ExtDllDLL,hInstance))return0;//InsertthisDLLintotheresourcechainnewCDynLinkLibrary(ExtDllDLL);}elseif(dwReason==DLL_PROCESS_DETACH){TRACE0("EXTDLL.DLLTerminating!\n");//TerminatethelibrarybeforedestrUCtorsarecalledAfxTermExtensionModule(ExtDllDLL);}return1;//ok}这一段代码含义晦涩,我们需要对其进行解读:(1)上述代码完成MFC扩展DLL的初始化和终止处理;(2)初始化期间所创建的CDynLinkLibrary对象使MFC扩展DLL可以将DLL中的CRuntimeClass对象或资源导出到应用程序;(3)AfxInitExtensionModule函数捕捉模块的CRuntimeClass结构和在创建CDynLinkLibrary对象时使用的对象工厂(COleObjectFactory对象);(4)AfxTermExtensionModule函数使MFC得以在每个进程与扩展DLL分离时(进程退出或使用AfxFreeLibrary卸载DLL时)清除扩展DLL;(5)第一条语句staticAFX_EXTENSION_MODULEExtDllDLL={NULL,NULL};定义了一个AFX_EXTENSI