none
对于invoke如何获得多个传出参数和结构体的问题 RRS feed

  • 问题

  • 比如说网上我找到一个简单的示例,

    com 中有这么一个接口  

    STDMETHODIMP CBB::get(LONG* pVal)

    {

            return     m_Val;

    }

    我在其他工程中这样调用

    CComPtr<IDispatch>        pIMyMath;

    int _tmain(int argc, _TCHAR* argv[])
    {
        CoInitialize(NULL);
        hr =  pIMyMath.CoCreateInstance(L"AA.BB.1");
        if (FAILED(hr))
        {
            printf("CoCreateInstance failed");
            goto end;
        }
        printf("succeed\n");

        
        VARIANT  vOut;
        VariantInit(&vOut);
        DISPPARAMS dispParam = {NULL, NULL, 0, 0 };

        hr = pIMyMath->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD | DISPATCH_PROPERTYGET, &dispParam, &vOut, NULL, NULL);
        if(FAILED(hr))
        {
            printf("FAILED");
        }

       printf("%d\n",vOut.lVal);

        VariantClear(&vOut);


        pIMyMath = NULL;


    end:
        CoUninitialize();
        getchar();
        return 0;
    }

    这样结果就到vOut里找就行了,但是如果我的接口是   比如 STDMETHODIMP CBB::Get(LONG* ret1,LONG* ret2 ,LONG* ret3)这种需要多个传出的呢,该怎么得到结果?求示例,另外求一下如何得到结构体,万分感谢!!!

    2012年3月19日 1:16

答案

  • cospos2012你好!

    请参考下面的步骤添加多个出入的方法:
    1-]打开COM项目,在[视图]菜单中打开[类视图]。
    2-]展开COM节点,并且定位到CBB类。
    3-]右键单击CBB,打开了添加方法向导,如下,输入方法名【Add】,在下方增加参数。
    4-]输入函数Get,增加一个返回参数:选择参数类型LONG*,输入参数ret1和ret2,点击添加。
    5-]勾选【retval】,选择参数类型LONG*,再添加两个返回参数ret3.
    6-]点击[下一步],切换到解决方案资源管理器,打开IDL定义文件,就可以看到定义的COM方法了。

    祝你好运!
    Helen Zhao


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年3月26日 1:20
    2012年3月20日 8:28