LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 365|回复: 0

IDispatch

[复制链接]
发表于 2024-2-4 23:35:50 | 显示全部楼层 |阅读模式
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();
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表