COM基础:组件 组件是COM对象的载体,包含多个COM对象。 组件由: 进程内组件(以DLL形式存在,使用LPC) 进程外组件(以EXE形式存在,使用RPC)
COM基础:组件 组件是COM对象的载体,包含多个COM对象。 组件由: 进程内组件( 以DLL形式存在,使用LPC ) 进程外组件( 以EXE形式存在,使用RPC )
COM基础:对象 COM对象与OOP中的 OBJECT一致。由 CLSID (128位整数唯一标识),实现多个接口。在 windows系统中所有COM对象的 CLSID值都保存在注 册表的一个分支下面( HKEY CLASS ROC00T\ CLSID) COM对象特性: UNknow 身份确定 封装 Interface object 可重用 Interface2
COM基础:对象 COM对象与OOP中的OBJECT一致。由CLSID (128位整数唯一标识),实现多个接口。在 windows系统中所有COM对象的CLSID值都保存在注 册表的一个分支下面(HKEY_CLASS_ROOOT\CLSID)。 COM对象特性: 身份确定 封装 可重用 Object IUnknown Interface1 Interface2
COM基础:接口 COM接口由IID:128位整数标识 采用 COM IDL接口定义语言定义接口 单继承 COM接口特性: 接口不变性:COM的接口一旦确定,将不 再改变,只能增加接口 继承性:与 OBJECT一样 多态性—主要是运行时刻的多态性
COM基础:接口 COM接口由IID:128位整数标识 采用COM IDL接口定义语言定义接口 单继承 COM接口特性: 接口不变性:COM的接口一旦确定,将不 再改变,只能增加接口 继承性:与OBJECT一样 多态性——主要是运行时刻的多态性
设计COM接口—从C++入手 C++类:接口与实现的分离 接口:类的 public部分 class CMyString/字符串类 private char *m pizi public CMyString(const char psz); CMyStringO c0 nst charn find( const char * psz);/寻找字符,接口函数 int Length;得到字符串长度,接口函数
设计COM接口——从C++入手 ◼ C++类:接口与实现的分离 ◼ 接口:类的public部分 class CMyString//字符串类 { private: char *m_psz; public: CMyString(const char * psz); ~CMyString(); const char*Find(const char *psz);//寻找字符,接口函数 int Length();//得到字符串长度,接口函数 };
设计COM接口——从C++入手(续) C++类的实现 MyString: CMyString( const char psz m psz( new charlpsz strlen(psz)+l: IDi if( psz strcpy(m psz, psz) else lpsz|0]=0; }/构造函数 CMyString: CMyStringo i delete l m psz; }/析构函数 const char* CMyString: Find(const char *psz) return strstr(m psz, psz); }/返回第一个与psz匹配的字符串指针 int CMyString:: Length t return strlen(m_ psz); }/返回字符串长度
设计COM接口——从C++入手(续) ◼ C++类的实现 CMyString::CMyString(const char * psz) : m_psz( new char[psz ? strlen(psz)+1 :1]) { if ( psz ) strcpy(m_psz,psz); else m_psz[0] = 0; }//构造函数 CMyString::~CMyString() { delete [] m_psz; }//析构函数 const char*CMyString::Find(const char *psz) { return strstr(m_psz,psz); } //返回第一个与psz匹配的字符串指针 int CMyString::Length() { return strlen(m_psz); }//返回字符串长度