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 呼叫內容的旗標。
[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。 如需詳細資訊,請參閱 傳回錯誤。
傳回值
這個方法可以傳回其中一個值。
傳回碼 | 描述 |
---|---|
|
成功。 |
|
提供給 DISPPARAMS 的項目數目與方法或屬性所接受的自變數數目不同。 |
|
DISPPARAMS 中的其中一個自變數不是有效的變體類型。 |
|
應用程式必須引發例外狀況。 在此情況下,應該填入以 pexcepinfo 傳遞的結構。 |
|
要求的成員不存在。 |
|
IDispatch 的這個實作不支援具名自變數。 |
|
DISPPARAMS 中的其中一個自變數無法強制套用至指定的型別。 |
|
其中一個參數標識碼未對應至 方法上的參數。 在此情況下, puArgErr 會設定為包含錯誤的第一個自變數。 |
|
無法強制一或多個自變數。 在 puArgErr 中傳回類型不正確之第一個參數的索引。 |
|
傳入 riid 的介面識別碼不會IID_NULL。 |
|
叫用的成員會根據 LCID 解譯字串自變數,而且無法辨識 LCID。 如果不需要 LCID 來解譯自變數,則不應該傳回此錯誤 |
|
省略必要的參數。 |
備註
一般而言,您不應該直接實作 Invoke 。 請改用分派介面來建立 函式 CreateStdDispatch 和 DispInvoke。 如需詳細資訊,請參閱 CreateStdDispatch、 DispInvoke、 建立 IDispatch 介面 和 公開 ActiveX 物件。
如果某些應用程式特定處理必須在呼叫成員之前執行,程式代碼應該執行必要的動作,然後呼叫 ITypeInfo::Invoke 來叫用成員。 ITypeInfo::Invoke 的作用與 Invoke 完全相同。 CreateStdDispatch 和 DispInvoke 所建立之 Invoke 的標準實作會延遲至 ITypeInfo::Invoke。
在 ActiveX 用戶端中, Invoke 應該用來取得和設定屬性值,或呼叫 ActiveX 物件的方法。 dispIdMember 自變數會識別要叫用的成員。 識別成員的 DISPID 是由物件的實作者所定義,而且可以使用對象的檔、 IDispatch::GetIDsOfNames 函式或 ITypeInfo 介面來決定。
當您搭配DISPATCH_PROPERTYPUT或DISPATCH_PROPERTYPUTREF使用 IDispatch::Invoke () 時,您必須使用下列專案特別初始化 DISPPARAMS 結構的 cNamedArgs 和 rgdispidNamedArgs 元素:
DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;
下列資訊可解決 ActiveX 用戶端開發人員,以及使用程式代碼公開 ActiveX 物件的其他人。 它會描述公開對象使用者應該預期的行為。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | oaidl.h |