欢迎来到天天文库
浏览记录
ID:29717650
大小:100.01 KB
页数:10页
时间:2018-12-22
《动态链接库dll编程深入浅出》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、这是《VC++动态链接库(DLL)编程深入浅出》的第四部分,阅读本文前,请先阅读前三部分:(一)、(二)、(三)。MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样。除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC。我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic、CButton等类使之具备更强大的能力。 使用VisualC++向导生产MFC扩展DLL时,MFC向导会自动增加DLL的入口函数DllMain:extern"C"intAPIE
2、NTRYDllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved){ //RemovethisifyouuselpReserved UNREFERENCED_PARAMETER(lpReserved); if(dwReason==DLL_PROCESS_ATTACH) { TRACE0("MFCEXPENDDLL.DLLInitializing!"); //ExtensionDLLone-timeinitialization if(!AfxInitExtensionModule(Mfcexpenddl
3、lDLL,hInstance)) return0; //InsertthisDLLintotheresourcechain //NOTE:IfthisExtensionDLLisbeingimplicitlylinkedtoby // anMFCRegularDLL(suchasanActiveXControl) // insteadofanMFCapplication,thenyouwillwantto // removethislinefromDllMainandputitinaseparate // functionexportedfromthi
4、sExtensionDLL. TheRegularDLL // thatusesthisExtensionDLLshouldthenexplicitlycallthat // functiontoinitializethisExtensionDLL. Otherwise, // theCDynLinkLibraryobjectwillnotbeattachedtothe // RegularDLL'sresourcechain,andseriousproblemswill // result. newCDynLinkLibrary(Mfcexpenddll
5、DLL); } elseif(dwReason==DLL_PROCESS_DETACH) { TRACE0("MFCEXPENDDLL.DLLTerminating!"); //Terminatethelibrarybeforedestructorsarecalled AfxTermExtensionModule(MfcexpenddllDLL); } return1; //ok} 上述代码完成MFC扩展DLL的初始化和终止处理。 由于MFC扩展DLL导出函数和变量的方式与其它DLL没有什么区别,我们不再细致讲解。下面直接给出一个MFC扩展DLL的创建
6、及在应用程序中调用它的例子。6.1MFC扩展DLL的创建 下面我们将在MFC扩展DLL中导出一个按钮类CSXButton(扩展自MFC的CButton类),类CSXButton是一个用以取代CButton的类,它使你能在同一个按钮上显示位图和文字,而MFC的按钮仅可显示二者之一。类CSXbutton的源代码在Internet上广泛流传,有很好的“群众基础”,因此用这个类来讲解MFC扩展DLL有其特殊的功效。 MFC中包含一些宏,这些宏在DLL和调用DLL的应用程序中被以不同的方式展开,这使得在DLL和应用程序中,使用统一的一个宏就可以表示出输出和输入的不同意思:/
7、/fordata#ifndefAFX_DATA_EXPORT #defineAFX_DATA_EXPORT__declspec(dllexport)#endif#ifndefAFX_DATA_IMPORT #defineAFX_DATA_IMPORT__declspec(dllimport)#endif//forclasses#ifndefAFX_CLASS_EXPORT #defineAFX_CLASS_EXPORT__declspec(dllexport)#endif#ifndefAFX_CLASS_IMPORT #defineAFX_CLASS
此文档下载收益归作者所有