【问题标题】:IDISPATCH::Invoke to call a method fails with error 0x80020005 type mismatchIDISPATCH::Invoke 调用方法失败,错误 0x80020005 类型不匹配
【发布时间】:2011-03-28 23:26:02
【问题描述】:

我正在尝试调用一个需要 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);

【问题讨论】:

  • 该特定错误消息通常是由于一个(或多个)方法参数的类型错误 - 例如,它需要一个 int 并且您给了它一个字符串。如果不知道您正在调用的对象的详细信息,很难确切地说出了什么问题,但我会说“添加”类型的方法通常没有源字符串和目标字符串作为参数。

标签: c++ com


【解决方案1】:

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

【讨论】:

  • 在函数返回值时传递 NULL 应该只返回错误 HRESULT,但这取决于实现 IDispatch 接口的对象。
猜你喜欢
  • 2021-03-23
  • 2011-04-01
  • 2020-05-27
  • 2019-04-28
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多