首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDispatch调用()返回类型不匹配

IDispatch调用()返回类型不匹配
EN

Stack Overflow用户
提问于 2020-12-11 14:54:10
回答 1查看 295关注 0票数 2

我无法成功地调用create_session成员。它是返回Type mismatch

代码语言:javascript
复制
// COM class -> member
virtual HRESULT __stdcall create_session(
        /*[in]*/ BSTR pbszName,
        /*[in]*/ long i32Value ) = 0;

试图按以下方式调用create_session方法:

代码语言:javascript
复制
// test.cpp
HRESULT create_session( IDispatch *dispatch, WCHAR *member ) {
    // WCHAR *member = tlib_help::s2ws( "create_session" );
    DISPID dispid = -1;
    HRESULT hr = dispatch->GetIDsOfNames( IID_NULL, &member, 1, LOCALE_SYSTEM_DEFAULT, &dispid );
    if ( SUCCEEDED( hr ) ) {
        DISPPARAMS *dispparams = new DISPPARAMS( );
        dispparams->cArgs = 2;
        dispparams->cNamedArgs = 1;
        VARIANTARG *rgvarg = new VARIANTARG[dispparams->cArgs];
        rgvarg[0].vt = VARENUM::VT_BSTR;
        rgvarg[0].bstrVal = _bstr_t( "loing_info" );
        rgvarg[1].vt = VARENUM::VT_UI4;
        rgvarg[1].lVal = 12;//i32Value;
        dispparams->rgvarg = rgvarg;
        dispparams->rgdispidNamedArgs = &dispid;
        EXCEPINFO pExcepInfo; UINT puArgErr;
        HRESULT hr;
        VARIANT pVarResult;
        hr = dispatch->Invoke(
            dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,
            dispparams, &pVarResult, &pExcepInfo, &puArgErr
        );
        delete dispparams;
        delete[] rgvarg;
    }
    return hr;
}

我想不出是什么原因造成了这个错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 17:13:09

方法必须以反向顺序的参数调用,如正式文档所述:

实现IDispatch /传递参数

参数在数组rgvarg中传递,参数数在cArgs中传递。数组中的参数应该从最后到第一个放置,因此rgvarg有最后一个参数,rgvargcArgs -1有第一个参数。

而且,在您的例子中,您不需要“命名参数”,只需要“位置参数”。如果cNamedArgs为0,则rgvarg[ ]的所有元素都表示位置参数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65253592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档