标签:
1.COM是一种规范,和语言无关。只要语言支持COM规范就可以用来创建COM对象
2.COM的母语仍然是C++,因为COM使用的数据类型,在一些语言中很难表达,
所以一般来说用C++制作可重用模块,其他弱类型语言将模块集成到应用中。
3.自动化技术为高级语言调用COM模块提供了有效途径,ActiveX是自动化的超集
4.应用程序支持自动化,就意外着他们可以连接到其他自动化兼容的组件中
5.自动化客户是:操纵其他程序暴露的自动化的对象的程序
自动化组件(服务器):提供自动化对象的程序。
6.自动化组件分为进程内组件和进程外组件,ATL的PS工程就是为进程外组件准备的。
7.所谓自动化对象:就是实现了IDispatch接口的对象。自动化具有属性和方法两个特征。
COM三大接口:
1.IUnknown
IUnknown { public: BEGIN_INTERFACE virtual HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject) = 0; virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0; virtual ULONG STDMETHODCALLTYPE Release( void) = 0; };
2.IClassFactory
1 IClassFactory : public IUnknown 2 { 3 public: 4 virtual HRESULT STDMETHODCALLTYPE CreateInstance( 5 IUnknown *pUnkOuter, 6 REFIID riid, 7 void **ppvObject) = 0; 8 9 virtual HRESULT STDMETHODCALLTYPE LockServer( 10 BOOL fLock) = 0; 11 12 };
3.IDispatch
1 IDispatch : public IUnknown 2 { 3 public: 4 virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( 5 UINT *pctinfo) = 0; 6 7 virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( 8 UINT iTInfo, 9 LCID lcid, 10 ITypeInfo **ppTInfo) = 0; 11 12 virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( 13 REFIID riid, 14 LPOLESTR *rgszNames, 15 UINT cNames, 16 LCID lcid, 17 DISPID *rgDispId) = 0; 18 19 virtual HRESULT STDMETHODCALLTYPE Invoke( 20 DISPID dispIdMember, 21 REFIID riid, 22 LCID lcid, 23 WORD wFlags, 24 DISPPARAMS *pDispParams, 25 VARIANT *pVarResult, 26 EXCEPINFO *pExcepInfo, 27 UINT *puArgErr) = 0; 28 29 };
详细信息请参考:http://blog.csdn.net/chenyujing1234/article/details/7753863
8.自动化对象使用的基本数据类型为VARIANT结构类型
标签:
原文地址:http://www.cnblogs.com/aoun/p/4309766.html