设讲cOM接口—一从C++入手 C++类;接口与实现的分离 接口类的pc部分 class Cmystring rivate char "m psz, public CMy String(const char*psz) CMyString0 const char* 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++类的实现 CMy String: CMy String( const char* psz) m psz new charlpsz strlen(psz)+1: ID( strcpy(m psz, psz) else CMy String: CMyString0 deletel m const char*CMyString Find( const char psz) return strstr(m psz, psz) int CMyString: Length i 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); } int CMyString::Length() { return strlen(m_psz); }
c+类的链接 linking 之静态链接 一许多类库的做法 编译时刻的链接 静态链接的缺点 代码重复:多个程序各有自己的 代码,需要更多的内存 客户程序占据更多的外存空间 库代码更新需要重新编译所有的 客户程序
C++类的链接linking linking !静态链接 – 许多类库的做法 许多类库的做法 – 编译时刻的链接 编译时刻的链接 !静态链接的缺点 静态链接的缺点 – 代码重复:多个程序各有自己的 代码重复:多个程序各有自己的 代码,需要更多的内存 代码,需要更多的内存 – 客户程序占据更多的外存空间 客户程序占据更多的外存空间 – 库代码更新需要重新编译所有的 库代码更新需要重新编译所有的 客户程序
c+类的链接 linking(续) #ifdef MYSTRINGDLL #define EXPORTORIMPort declspec( dllexport #else #define EXPORTORIMPORT declspec(dllimport #endif 动态链接 运行时刻的链接 class eXportorimPort CMy string 动态链接形式 private char *m 编译时刻通过引入库ptc CMyString( const char * psz) 一运行时刻完全动态 CMyStringO const char*Find( const char *psz); int Length };
C++类的链接linking( linking( 续 ) !动态链接 – 运行时刻的链接 运行时刻的链接 !动态链接形式 – 编译时刻通过引入库 编译时刻通过引入库 – 运行时刻完全动态 运行时刻完全动态 #ifdef MYSTRINGDLL #define EXPORTORIMPORT _declspec(dllexport) #else #define EXPORTORIMPORT _declspec(dllimport) #endif class EXPORTORIMPORT CMyString { private: char *m_psz; public: CMyString(const char * psz); ~CMyString(); const char*Find(const char *psz); int Length(); };
cH接口如何走向COM接囗 动态链接符合COM的需 C++中类形式的接口存在的问题 客户看到了什么? 若用 Visual o+5.0/6.0编译器 ??0CMy String@aQAEaPBDaz ? 1CMyString@@QAE@XZ Find(@CMy String@@QAEPBDPBD@Z ?Length@CMy String@@QAEHXZ
C++接口如何走向COM接口 !动态链接符合COM的需要 !C++中类形式的接口存在的问题 中类形式的接口存在的问题 – 客户看到了什么? 客户看到了什么? – 若用Visual C++ 5.0/6.0 Visual C++ 5.0/6.0编译器 ??0CMyString@@QAE@PBD@Z ??1CMyString@@QAE@XZ ?Find@CMyString@@QAEPBDPBD@Z ?Length@CMyString@@QAEHXZ