IDISPATCH::Вызов метода завершается с ошибкой 0x80020005 несоответствие типов

#c #com

#c #com

Вопрос:

Я пытаюсь вызвать метод, который принимает 2 строки, вот вам код

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

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

                                    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, 
                                        amp;dpEntry, NULL, amp;ex, amp;index);
  

Комментарии:

1. Это конкретное сообщение об ошибке обычно возникает из-за того, что один (или более) аргументов метода имеют неправильный тип — например, он ожидает значение int, а вы дали ему строку. Трудно точно сказать, что не так, не зная подробностей объекта, к которому вы вызываете, но я скажу, что методы типа ‘Add’ обычно не имеют исходной и целевой строк в качестве параметров.

Ответ №1:

Код ошибки недвусмысленно сообщает вам, что функция на самом деле не принимает два аргумента типа string. Также возможно неправильное определение идентификатора, это вызовет неправильную функцию. Следите за возвращаемым значением, не уверен, что произойдет, когда вы передадите NULL, но функция вернет значение.

Комментарии:

1. Передача NULL, когда функция возвращает значение, ДОЛЖНА просто возвращать ошибку HRESULT, но это зависит от объекта, реализующего интерфейс IDispatch.