COM学习笔记<2>

1,别忘了初始化COM.(AfxOleInit,CoInitialize...)

2,使用CComBSTR来操作BSTR数据类型,这样就不种自己来释放内存了.使用CComBSTR请确认已包含头文件<atlbase.h>.简单使用示例如下.

1 STDMETHODIMP CDispSimple::Upper(BSTR str, BSTR *pVal)
2 {
3     // TODO: Add your implementation code here
4     CComBSTR bstr(str);
5     bstr.ToUpper();
6     *pVal=bstr.Copy();
7     return S_OK;
8 }

3,常规接口调用方法.

Code

  记得最后要释放接口指针.在上例中可以直接指定IID为IID_IFun,直接得到IFun接口指针,而不必要由IUnknown指针来QueryInterface来获得.

4,智能指针的使用方法.使用智能指针的最大好处在于不用我们自己来释放接口指针了.简单使用示例如下:

 1 CComPtr < IUnknown > spUnk;        // 定义 IUnknown 的智能指针
 2 CComPtr < IFun > spFun;            // 定义 IFun 的智能指针
 3 HRESULT hr;
 4 // 可以使用 CLSID 启动组件,也可以使用 ProgID
 5 hr = spUnk.CoCreateInstance( CLSID_Fun );
 6 if( FAILED( hr ) )    throw( _T("没注册组件吧?") );
 7 
 8 hr = spUnk.QueryInterface( &spFun );
 9 if( FAILED( hr ) )    throw( _T("居然没有接口") );
10 
11 long nSum;
12 hr = spFun->Add( 12&nSum );
13 if( SUCCEEDED( hr ) )
14 {
15   CString sMsg;
16   sMsg.Format( _T("1 + 2 = %d"), nSum );
17   AfxMessageBox( sMsg );
18 }
19 

5,使用CComQIPtr,自动调用QueryInterface.

Code

    也可以采用如下方法使用CComQIPtr,而不经过CComPtr<IUnknown>:

Code

 

posted on 2009-10-29 10:19  Joshua Leung  阅读(265)  评论(0编辑  收藏  举报

导航