|
CComPtr 提供了针对 IDispatch 的专用化,使它能够存储指向 COM 自动化组件的指针并使用后期绑定调用接口方法。 CComDispatchDriver 是 CComQIPtr<IDispatch, &IIDIDispatch>(可隐式转换为 CComPtr<IDispatch>)的 typedef。 因此,当这三个名称中的任何一个出现在代码中时,它都与 CComPtr<IDispatch>等效。 以下示例演示如何使用 CComPtr<IDispatch>获取指向 Microsoft Word 对象模型的指针。
void COMAutomationSmartPointerDemo()
{
CComPtr<IDispatch> pWord;
CComQIPtr<IDispatch, &IID_IDispatch> pqi = pWord;
CComDispatchDriver pDriver = pqi;
HRESULT hr;
_variant_t pOutVal;
CoInitialize(NULL);
hr = pWord.CoCreateInstance(L"Word.Application", NULL, CLSCTX_LOCAL_SERVER);
if(FAILED(hr)){ /*... handle hr error*/ }
// Make Word visible.
hr = pWord.PutPropertyByName(_bstr_t("Visible"), &_variant_t(1));
if(FAILED(hr)){ /*... handle hr error*/ }
// Get the Documents collection and store it in new CComPtr
hr = pWord.GetPropertyByName(_bstr_t("Documents"), &pOutVal);
if(FAILED(hr)){ /*... handle hr error*/ }
CComPtr<IDispatch> pDocuments = pOutVal.pdispVal;
// Use Documents to open a document
hr = pDocuments.Invoke1 (_bstr_t("Open"), &_variant_t("c:\\users\\public\\documents\\sometext.txt"),&pOutVal);
if(FAILED(hr)){ /*... handle hr error*/ }
CoUninitialize();
}
|
|