动态链接库DLL编程深入浅出4.doc
《动态链接库DLL编程深入浅出4.doc》由会员分享,可在线阅读,更多相关《动态链接库DLL编程深入浅出4.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流动态链接库DLL编程深入浅出4.精品文档.这是VC+动态链接库(DLL)编程深入浅出的第四部分,阅读本文前,请先阅读前三部分:(一)、(二)、(三)。MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样。除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC。我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic、CButton等类使之具备更强大的能力。使用Visual C+向导生产MFC扩展DLL时,MFC向导会自动增加DLL
2、的入口函数DllMain:extern C int APIENTRYDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)/ Remove this if you use lpReservedUNREFERENCED_PARAMETER(lpReserved);if (dwReason = DLL_PROCESS_ATTACH)TRACE0(MFCEXPENDDLL.DLL Initializing!n);/ Extension DLL one-time initializationif (!AfxInitExtensio
3、nModule(MfcexpenddllDLL, hInstance)return 0;/ Insert this DLL into the resource chain/ NOTE: If this Extension DLL is being implicitly linked to by/ an MFC Regular DLL (such as an ActiveX Control)/ instead of an MFC application, then you will want to/ remove this line from DllMain and put it in a se
4、parate/ function exported from this Extension DLL. The Regular DLL/ that uses this Extension DLL should then explicitly call that/ function to initialize this Extension DLL. Otherwise,/ the CDynLinkLibrary object will not be attached to the/ Regular DLLs resource chain, and serious problems will/ re
5、sult.new CDynLinkLibrary(MfcexpenddllDLL);else if (dwReason = DLL_PROCESS_DETACH)TRACE0(MFCEXPENDDLL.DLL Terminating!n);/ Terminate the library before destructors are calledAfxTermExtensionModule(MfcexpenddllDLL);return 1; / ok上述代码完成MFC扩展DLL的初始化和终止处理。由于MFC扩展DLL导出函数和变量的方式与其它DLL没有什么区别,我们不再细致讲解。下面直接给出一
6、个MFC扩展DLL的创建及在应用程序中调用它的例子。6.1 MFC扩展DLL的创建下面我们将在MFC扩展DLL中导出一个按钮类CSXButton(扩展自MFC的CButton类),类CSXButton是一个用以取代 CButton的类,它使你能在同一个按钮上显示位图和文字,而MFC的按钮仅可显示二者之一。类CSXbutton的源代码在Internet上广泛流传,有很好的“群众基础”,因此用这个类来讲解MFC扩展DLL有其特殊的功效。MFC中包含一些宏,这些宏在DLL和调用DLL的应用程序中被以不同的方式展开,这使得在DLL和应用程序中,使用统一的一个宏就可以表示出输出和输入的不同意思:/ fo
7、r data#ifndef AFX_DATA_EXPORT#define AFX_DATA_EXPORT _declspec(dllexport)#endif#ifndef AFX_DATA_IMPORT#define AFX_DATA_IMPORT _declspec(dllimport)#endif/ for classes#ifndef AFX_CLASS_EXPORT#define AFX_CLASS_EXPORT _declspec(dllexport)#endif#ifndef AFX_CLASS_IMPORT#define AFX_CLASS_IMPORT _declspec(d
8、llimport)#endif/ for global APIs#ifndef AFX_API_EXPORT#define AFX_API_EXPORT _declspec(dllexport)#endif#ifndef AFX_API_IMPORT#define AFX_API_IMPORT _declspec(dllimport)#endif#ifndef AFX_EXT_DATA#ifdef _AFXEXT#define AFX_EXT_CLASS AFX_CLASS_EXPORT#define AFX_EXT_API AFX_API_EXPORT#define AFX_EXT_DATA
9、 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导出一个类,直接在类声明头文件中使用AFX_EXT_CLASS即可,以下是导出CSXButton类的例子:#ifndef _SXBUTTON_H#define _SXBUTTON_H#defineSXBUTTON_CENTER
10、-1class AFX_EXT_CLASS CSXButton : public CButton/ Constructionpublic:CSXButton();/ Attributesprivate:/PositioningBOOLm_bUseOffset;CPointm_pointImage;CPointm_pointText;intm_nImageOffsetFromBorder;intm_nTextOffsetFromImage;/ImageHICONm_hIcon;HBITMAPm_hBitmap;HBITMAPm_hBitmapDisabled;intm_nImageWidth,
11、m_nImageHeight;/Color Tabcharm_bColorTab;COLORREFm_crColorTab;/StateBOOLm_bDefault;UINTm_nOldAction;UINTm_nOldState;/ Operationspublic:/PositioningintSetImageOffset( int nPixels ); intSetTextOffset( int nPixels );CPointSetImagePos( CPoint p );CPointSetTextPos( CPoint p );/ImageBOOLSetIcon( UINT nID,
12、 int nWidth, int nHeight );BOOLSetBitmap( UINT nID, int nWidth, int nHeight );BOOLSetMaskedBitmap( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask );BOOLHasImage() return (BOOL)( m_hIcon != 0 | m_hBitmap != 0 ); /Color TabvoidSetColorTab(COLORREF crTab);/StateBOOLSetDefaultButton( BOOL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 链接 DLL 编程 深入浅出
限制150内