IDispatch::Invoke 方法 (oaidl.h)

提供物件所公開的屬性和方法的存取權。 分派函式 DispInvoke 提供 Invoke的標準實作。

語法

HRESULT Invoke(
  [in]      DISPID     dispIdMember,
  [in]      REFIID     riid,
  [in]      LCID       lcid,
  [in]      WORD       wFlags,
  [in, out] DISPPARAMS *pDispParams,
  [out]     VARIANT    *pVarResult,
  [out]     EXCEPINFO  *pExcepInfo,
  [out]     UINT       *puArgErr
);

參數

[in] dispIdMember

辨識成員。 使用 GetIDsOfNames 或物件的檔來取得分派識別碼。

[in] riid

保留供未來使用。 必須是 IID_NULL。

[in] lcid

地區設定內容,用於解譯引數。 lcid是由GetIDsOfNames函式使用,也會傳遞至Invoke,以允許物件解譯其地區設定特有的引數。

不支援多種語言的應用程式可以忽略此參數。 如需詳細資訊,請參閱 支援多種語言公開 ActiveX 物件

[in] wFlags

描述 Invoke 呼叫內容的旗標。

意義
DISPATCH_METHOD
成員會叫用為 方法。 如果屬性具有相同的名稱,則可以設定這個 和 DISPATCH_PROPERTYGET 旗標。
DISPATCH_PROPERTYGET
成員會擷取為屬性或資料成員。
DISPATCH_PROPERTYPUT
成員會變更為屬性或資料成員。
DISPATCH_PROPERTYPUTREF
成員會由參考指派變更,而不是值指派。 只有當 屬性接受物件的參考時,這個旗標才有效。

[in, out] pDispParams

DISPPARAMS 結構的指標,其中包含引數陣列、具名引數的引數 DISPID 陣列,以及陣列中元素數目的計數。

[out] pVarResult

要儲存結果的位置指標,如果呼叫端預期沒有結果,則為 Null。 如果指定DISPATCH_PROPERTYPUT或DISPATCH_PROPERTYPUTREF,則會忽略此引數。

[out] pExcepInfo

包含例外狀況資訊的結構指標。 如果傳回DISP_E_EXCEPTION,則應該填入這個結構。 可以是 NULL。

[out] puArgErr

發生錯誤之第一個引數的 rgvarg 內的索引。 引數會以反向順序儲存在 pDispParams-rgvarg > 中,因此第一個引數是陣列中索引最高的引數。 只有在產生的傳回值DISP_E_TYPEMISMATCH或DISP_E_PARAMNOTFOUND時,才會傳回此參數。 這個引數可以設定為 null。 如需詳細資訊,請參閱 傳回錯誤

傳回值

這個方法可以傳回其中一個值。

傳回碼 說明
S_OK
成功。
DISP_E_BADPARAMCOUNT
提供給 DISPPARAMS 的專案數目與方法或屬性所接受的引數數目不同。
DISP_E_BADVARTYPE
DISPPARAMS 中的其中一個引數不是有效的變體類型。
DISP_E_EXCEPTION
應用程式必須引發例外狀況。 在此情況下,應該填入以 pexcepinfo 傳遞的結構。
DISP_E_MEMBERNOTFOUND
要求的成員不存在。
DISP_E_NONAMEDARGS
IDispatch的這個實作不支援具名引數。
DISP_E_OVERFLOW
DISPPARAMS 中的其中一個引數無法強制套用至指定的型別。
DISP_E_PARAMNOTFOUND
其中一個參數識別碼未對應至 方法上的參數。 在此情況下, puArgErr 會設定為包含錯誤的第一個引數。
DISP_E_TYPEMISMATCH
無法強制一或多個引數。 在 puArgErr中傳回類型不正確之第一個參數的索引。
DISP_E_UNKNOWNINTERFACE

傳入 riid 的介面識別碼不會IID_Null。
DISP_E_UNKNOWNLCID
叫用的成員會根據 LCID 解譯字串引數,而且無法辨識 LCID。 如果不需要 LCID 來解譯引數,則不應該傳回此錯誤
DISP_E_PARAMNOTOPTIONAL
省略必要的參數。

備註

一般而言,您不應該直接實作 Invoke 。 請改用分派介面來建立 函式 CreateStdDispatchDispInvoke。 如需詳細資訊,請參閱 CreateStdDispatchDispInvoke建立 IDispatch 介面公開 ActiveX 物件

如果某些應用程式特定處理必須在呼叫成員之前執行,程式碼應該執行必要的動作,然後呼叫 ITypeInfo::Invoke 來叫用成員。 ITypeInfo::Invoke 的作用與 Invoke完全相同。 CreateStdDispatchDispInvoke所建立之 Invoke的標準實作會延遲至ITypeInfo::Invoke

在 ActiveX 用戶端中, Invoke 應該用來取得和設定屬性值,或呼叫 ActiveX 物件的方法。 dispIdMember引數會識別要叫用的成員。 識別成員的 DISPID 是由物件的實作者所定義,而且可以使用物件的檔、 IDispatch::GetIDsOfNames 函式或 ITypeInfo 介面來決定。

當您搭配使用 IDispatch::Invoke () 搭配DISPATCH_PROPERTYPUT或DISPATCH_PROPERTYPUTREF時,您必須使用下列專案特別初始化 DISPPARAMS 結構的 cNamedArgsrgdispidNamedArgs 元素:

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

下列資訊可解決 ActiveX 用戶端開發人員,以及使用程式碼公開 ActiveX 物件的其他人。 它會描述公開物件使用者應該預期的行為。

規格需求

   
目標平臺 Windows
標頭 oaidl.h

另請參閱

IDispatch