学习书籍:《COM原理与应用》
======================================================================
UUID生成方式:
1.UUIDGen.exe命令行工具
2.GUIDGen.exe对话框应用程序
3.HRESULT CoCreateGuid(GUID * pguid);//成功返回S_OK
GUID guid;
HRESULT hr1 = CoCreateGuid( &guid );
cout<<hex<<guid.Data1<<"-";//long 4 #include<iomanip>
cout<<guid.Data2<<"-";//short 2
cout<<guid.Data3<<"-";//short 3
for(int i=0;i<8;++i)
cout<<(int)guid.Data4[i];
cout<<endl;
======================================================================
__cdecl和__stdcall:
__cdecl是C语言特有的可变参数列表的函数调用方式,如printf(const char * format , ...);其他语言可能不支持这种方式。
__stdcall是标准函数调用方式,即普通的函数参数个数确定的情况下使用。
======================================================================
IDL(Interface Discription Language,接口描述语言):
可由MIDL编译工具转换成标准*.h文件。idict.idl => idict.h
======================================================================
接口的继承性:
1.接口只能单继承
2.接口继承的目的是为了拓展接口,命名规范为IInterface,继承它的接口应命名为IInterface2或者IInterfaceEx(Ex为extension的意思)
3.COM规定,所有接口都必须直接或间接派生自IUnknown
COM和Java技术的约定
1.接口之间只能单继承
2.实现类可以多继承接口
3.实现类之间可以多继承
======================================================================
IUnknown的作用:
1.提供接口查询。可以知道对象是否存在
2.生命周期的管理。内部使用引用计数(参照Qt中隐式共享技术,boost中的shared_ptr等智能指针的引用计数)。
3.
4.
5.AddRef用来增加引用计数