COM开发 潘爱民 http://www.icst.pkuedu.cn/compcourse
COM开发 潘爱民 http://www.icst.pku.edu.cn/compcourse
内容 Win32SDK和MFC介绍 MFC对COM的支持 用MFC开发COM组件 ATL对COM的支持 用ATL开发COM组件 布置作业
内容 • Win32 SDK和MFC介绍 • MFC对COM的支持 • 用MFC开发COM组件 • ATL对COM的支持 • 用ATL开发COM组件 • 布置作业
Win32SDK: Windows程序结构 入口函数 Winmain 应用初始化 主窗口的创建及显示 消息分发循环 程序结束处理
Win32 SDK: Windows程序结构 • 入口函数WinMain • 应用初始化 • 主窗口的创建及显示 • 消息分发循环 • 程序结束处理
Win32SDK对COM的支持 Win32SDK包括COM库函数的支持 Wn32SDK提供的一些头文件的说明 头文件 说明 Unknwn. h 标准接口 IUnknown和 IClassFactory的D及接口成员函数的定义。 Types. h 包含了COM使用的数据结构的说明。 所有标准接口的定义,既可用于C语言风格的定义,也可用于C艹语言风格 Objid. h 的定义。 Cometh 所有标准接口以及COM和OE内部对象的 CLSID ObjBase h 所有的 COMAPI函数的说明。 Ole2. h 所有经过封装的OLE辅助函数
Win32 SDK对COM的支持 • Win32 SDK包括COM库函数的支持 Win32 SDK 提供的一些头文件的说明 头文件 说明 Unknwn.h 标准接口 IUnknown 和 IClassFactory 的 IID 及接口成员函数的定义。 Wtypes.h 包含了 COM 使用的数据结构的说明。 Objidl.h 所有标准接口的定义,既可用于 C 语言风格的定义,也可用于 C++语言风格 的定义。 Comdef.h 所有标准接口以及 COM 和 OLE 内部对象的 CLSID。 ObjBase.h 所有的 COM API 函数的说明。 Ole2.h 所有经过封装的 OLE 辅助函数
利用宏描述接口 DECLARE INTERFACE (IClassFactory, IUnknown STDMETHOD(QueryInterface)(THIS REFIID riid LPVOID FAR* PPVObJ PURE STDMETHOD ULONG, AddRef)(THIS) PURE STDMETHOD (ULONG, Release)(THIS) PURE STDMETHOD(CreateInstance)(THIS LPUNKNOWN pUnkOuter REFIID riid LP VOID FAR PPVObject)PURE, STDMETHOD(Lock Server )(THIS BOOL fLock) PURE
利用宏描述接口 DECLARE_INTERFACE_(IClassFactory, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; STDMETHOD(CreateInstance) (THIS_ LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR* ppvObject) PURE; STDMETHOD(LockServer)(THIS_ BOOL fLock) PURE; };
VC提供的用于描述接口的宏 与COM接口有关的一些宏的说明 宏 说明 DECLARE INTERFACE(iface 声明接口iace,它不从其它的接口派生。 DECLARE INTERFACE( iface, baseiface)声明接口iece,它从接口bsee派生。 STDMETHOD(method) 声明接口成员函数 method,函数返回类型为 HRESULT。 STDMETHOD(type, method) 声明接口成员函数 method,函数返回类型为tpe
VC提供的用于描述接口的宏 与 COM 接口有关的一些宏的说明 宏 说明 DECLARE_INTERFACE(iface) 声明接口 iface,它不从其它的接口派生。 DECLARE_INTERFACE_( iface, baseiface) 声明接口 iface,它从接口 baseiface 派生。 STDMETHOD(method) 声明接口成员函数 method,函数返回类型为 HRESULT。 STDMETHOD_(type,method) 声明接口成员函数 method,函数返回类型为 type
MFC基础 应用类 Afx Netapp CWinApp: InitInstance CWinApp: ExitInstance CWinApp: Onldle CWinApp: Run CWnd*m pMainWnd 窗口类 AfxGetmain Wnd
MFC基础 • 应用类 – AfxGetApp – CWinApp::InitInstance – CWinApp::ExitInstance – CWinApp::OnIdle – CWinApp::Run – CWnd *m_pMainWnd • 窗口类 – AfxGetMainWnd
MFC的消息处理机制 消息映射表 在CWnd派生类定义中加入声明: DECLARE MESSAGE MAPO 在类的实现文件中加入表和表项的定义: BEGIN MESSAGE MAP(the Class, base Class END MESSAGE MAP
MFC的消息处理机制 ——消息映射表 • 在CWnd派生类定义中加入声明: DECLARE_MESSAGE_MAP() • 在类的实现文件中加入表和表项的定义: BEGIN_MESSAGE_MAP(theClass, baseClass) ...... END_MESSAGE_MAP
消息映射表示例 BEGIN MESSAGE MAP(the Class, base Class RAFX MSG MAP(the Class) ON WM SETFOCUSO ON WM CREATEO ON WM DESTROYO ON WM CLOSEO ON WM SIZEO ON MESSAGECWM COMMANDHELP, OnCommandHelp ON MESSAGECWM HELPHITTEST, On HelpHitTest ON UPDATE COMMAND UI(ID VIEW STATUS BAR OnUpdate ControlBarMenu) ON NOTIFY EX RANGE(TTN NEEDTEXTW, 0, OXFFFF On ToolTip Text) ∥} AFX MSG MAP END MESSAGE MAP
消息映射表示例 BEGIN_MESSAGE_MAP(theClass, baseClass) //{{AFX_MSG_MAP(theClass) ON_WM_SETFOCUS() ON_WM_CREATE() ON_WM_DESTROY() ON_WM_CLOSE() ON_WM_SIZE() ON_MESSAGE(WM_COMMANDHELP, OnCommandHelp) ON_MESSAGE(WM_HELPHITTEST, OnHelpHitTest) ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateControlBarMenu) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) //}}AFX_MSG_MAP END_MESSAGE_MAP
MFC应用类型 常规应用:MD应用、SD应用、基于对话框程序 DLL应用:静态连接MFC库的正规DL、动态连接 MFC库的正规DLL、MFC扩展DL 其他应用: 支持OLE服务或者包容器的SD应用 支持OLE服务或者包容器的MD应用 支持自动化( Automation)服务的SD或者MD程序 ActiveX控制应用OCX应用
MFC应用类型 • 常规应用:MDI应用、SDI应用、基于对话框程序 • DLL应用:静态连接MFC库的正规DLL、动态连接 MFC库的正规DLL、MFC扩展DLL • 其他应用: – 支持OLE服务或者包容器的SDI应用 – 支持OLE服务或者包容器的MDI应用 – 支持自动化(Automation)服务的SDI或者MDI程序 – ActiveX控制应用(OCX应用)