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 介面來決定。

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

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

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

規格需求

需求
目標平台 Windows
標頭 oaidl.h

另請參閱

IDispatch