2011-03-28 45 views
0

我試圖調用mthod這裏需要2串你的代碼的IDispatch :: Invoke來調用一個方法失敗,錯誤0x80020005類型不匹配

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); 
+0

該特定的錯誤消息通常是由於一個(或多個)方法參數是錯誤的類型 - 例如,它期望一個int並且您給它一個字符串。如果不知道所調用的對象的細節,很難說出錯的地方,但我會說'Add'類型的方法通常沒有源和目標字符串作爲參數。 – Jon 2011-03-28 15:28:09

回答

1

錯誤代碼明確地告訴你,該函數實際上並不需要兩個字符串類型的參數。錯誤的錯誤也是可能的,它會調用錯誤的函數。注意返回值,不知道當你傳遞NULL時會發生什麼,但函數返回一個值。

+0

當函數返回一個值時傳遞NULL應該只是返回一個錯誤HRESULT,但它取決於實現IDispatch接口的對象。 – Jon 2011-03-28 15:31:43

相關問題