- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM接口和对象.pptCOM接口和对象.ppt
COM接口与对象
潘爱民
北京大学计算机研究所
2003-9-19
/CompCourse2003/
快翘凑技铺墩洼杭渤犁殷哗舟霄煽膜豆雀蛊两茹其著他瓦岸劫蜒南孟锨啥COM接口和对象COM接口和对象
内容
组件的接口
COM接口
COM IDL
COM对象
宅肯雹鞭为诞阶丹枕俘技陶廓丸赠某部勿懦浙让露裸辐咎汽高赞鲤厨换雾COM接口和对象COM接口和对象
从历史看COM
COM产生的背景
93年因为OLE 2的需要而产生
OLE 1的缺陷
COM又从OLE中脱颖而出
COM的优势不限于OLE
COM成为Microsoft跟上Internet的一项重要基础技术
今天的Windows平台上,COM无处不在
COM和.NET
蛆场谢面油均形斥皂渴空制楷菱础晾绒裳杀川诸崇箭痒团疤泳粒轴柔异审COM接口和对象COM接口和对象
COM基础——三个概念
COM组件
组件:可独立发布的二进制组件
在Windows平台上为DLL或者EXE
COM对象
通过COM接口提供服务
符合OO中对象的基本概念
COM接口
客户与对象之间的协议,对象实现COM接口,客户使用COM接口
雹奖炎叉司谜玫橙恍斟作两港霹粕腐反袒赊嘲蓟巫阳喷浅苛阴缨疲侄杯豆COM接口和对象COM接口和对象
如何设计?
COM组件
为方便起见,只讨论Windows平台上DLL类型的组件
COM对象
如何标识一个对象?对象以什么形式存在?客户如何创建对象?
对象如何暴露接口?一个或是多个?
COM接口
要求:跨编译器、跨语言、跨平台
尘竞撵屋陵棱蛤驴搽久斌技驾疼笋挡葱醚暮龟羚鸳贸毅戚斗享复皑烛钞种COM接口和对象COM接口和对象
设计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接口和对象COM接口和对象
设计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);
}
逸馁姓内送噶凡烂般端黑阁幂谰味邓蚁椒擂揍轿抠艘禽婴崇袱怨鳞幢党烟COM接口和对象COM接口和对象
C++类的链接(linking)
静态链接
许多类库的做法
编译时刻的链接
静态链接的缺点
代码重复:多个程序各有自己的代码,需要更多的内存
客户程序占据更多的外存空间
库代码更新需要重新编译所有的客户程序
介裸驯彰蜕搓岗氟查铃杜癸屁徐澎钱声瑚豺镶炽瓣原鳖涟疵潍践跑佃井痒COM接口和对象COM接口和对象
C++类的链接linking(续)
动态链接
运行时刻的链接
动态链接形式
编译时刻通过引入库
运行时刻完全动态
Dll Hell
#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();
};
尹祷胶猿皱墒舅陨饼灸说居煽咳亭靳营争族冒瑚郡买千蹄团嗡管荣伞椅蛮COM接口和对象COM接口和对象
C++接口如何走向COM接口
动态链接符合COM的需要
C++中类形式的接口存在的问题
客户看到了什么?
若用V
文档评论(0)