c++ - IDISPATCH::Invoke 调用方法失败,错误 0x80020005 类型不匹配

标签 c++ com

我正在尝试调用一个采用 2 个字符串的方法,这里是代码

VARIANT vArgs[2];
                                            VariantInit(&vArgs[0]);
                                            VariantInit(&vArgs[1]);
                                            //VariantInit(&vArgs[2]);

                                    //vArgs[2].pdispVal = pDisptEntries;
                                    vArgs[1].bstrVal = bstrSrc;
                                    vArgs[0].bstrVal = bstrtrgt;

                                    vArgs[0].vt = VT_BSTR;
                                    vArgs[1].vt = VT_BSTR;
                                    //vArgs[2].vt = VT_DISPATCH;

                                    dpEntry.rgvarg = vArgs;
                                    dpEntry.cArgs = 2;
                                    dpEntry.cNamedArgs = 0;
                                    //dpEntry.rgdispidNamedArgs = new DISPID[2];
                                    //dpEntry.rgdispidNamedArgs[0] = 0;
                                    //dpEntry.rgdispidNamedArgs[1] = 1;

                                    UINT index = -1;
                                    EXCEPINFO   ex;

                                    hr = pDisptEntries->Invoke(dispid_Add, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, 
                                        &dpEntry, NULL, &ex, &index);

最佳答案

错误代码明确地告诉您该函数实际上不接受两个字符串类型的参数。弄错 dispid 也是可能的,它会调用错误的函数。注意返回值,不确定当你传递 NULL 但函数返回值时会发生什么。

关于c++ - IDISPATCH::Invoke 调用方法失败,错误 0x80020005 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461126/

相关文章:

c# - 如何在.NET中处理COM对象的事件时释放所有COM对象

c++ - 如何处理具有 IWebBrowser2 对象的 IHttpSecurity::OnSecurityProblem

c# - 如何将 COM 互操作代理生成到 C# 源代码中?

c++ - 从vs15更新到vs17 660后出现错误

C++20 使用概念来强制类上的接口(interface)

c++ - vector .push_back

c# - SAPbobsCOM 不工作

c# - 读取音频文件时出错?

c++ - BeagleBone Black 通过内核驱动中断

c++ - 使用 gcc 使用常量及其关联的修饰符