TComponent::Invoke - C++ Builder

C++ Builder 參考手冊 ? TComponent ? Invoke


頭文件:#include <System.Classes.hpp>
命名空間:System::Classes
類:TComponent
訪問權(quán)限:protected:
函數(shù)原型:

HRESULT __stdcall Invoke(
    int DispID, 
    const GUID &IID, 
    int LocaleID, 
    System::Word Flags, 
    void *pParams, 
    void *pVarResult, 
    void *pExcepInfo, 
    void *pArgErr);

System::Classes::TComponent::Invoke 是 System::Classes::TComponent 的成員函數(shù)捏卓,如果這個組件封裝了 COM 對象,Invoke 可以訪問 COM 對象的屬性和調(diào)用 COM 對象的方法梯啤。

參數(shù):

  • DispID:屬性、方法和參數(shù)的 ID赂毯,需要使用 GetIDsOfNames 方法獲群薇贰;
  • IID:預(yù)留參數(shù)澡腾,必須是 IID_NULL敞映;
  • LocaleID 區(qū)域和語言的 ID较曼,可以用 GetThreadLocale 獲取振愿;
  • Flags:調(diào)用的類型:
    DISPATCH_METHOD:調(diào)用方法捷犹;
    DISPATCH_PROPERTYGET:讀屬性弛饭;
    DISPATCH_PROPERTYPUT:寫屬性
    DISPATCH_PROPERTYPUTREF:寫屬性萍歉,通過傳引用而不是傳值侣颂;
  • pParams:實際上是 DISPPARAMS * 類型的,調(diào)用函數(shù)的參數(shù)枪孩;
  • pVarResult:實際上是 VARIANT * 類型的憔晒,函數(shù)的返回值,沒有返回值可以用 NULL蔑舞;
  • pExcepInfo:實際上是 EXCEPINFO * 類型的拒担,如果 Invoke 返回值是 DISP_E_EXCEPTION,這個參數(shù)返回執(zhí)行異常攻询,不需要可以用 NULL从撼;
  • pArgErr:實際上是 unsigned int * 類型的,如果參數(shù)有錯誤钧栖,Invoke
    的返回值是 DISP_E_TYPEMISMATCH 或 DISP_E_PARAMNOTFOUND低零,這個參數(shù)返回第一個出錯的參數(shù)的序號,如果不需要可以用 NULL拯杠。

返回值:

返回值 說明
S_OK 成功
DISP_E_BADPARAMCOUNT 提供的 DISPPARAMS 里面包含的參數(shù)個數(shù)不對
DISP_E_BADVARTYPE DISPPARAMS 的 rgvarg 包含不正確的 variant 類型的參數(shù)
DISP_E_EXCEPTION 執(zhí)行過程中產(chǎn)生了異常掏婶,異常通過填寫參數(shù) pExcepInfo 來返回
DISP_E_MEMBERNOTFOUND 成員 (屬性或方法) 未找到,或者寫只讀屬性引起的錯誤
DISP_E_NONAMEDARGS 這個 IDispatch 不支持命名的參數(shù)
DISP_E_OVERFLOW DISPPARAMS 的 rgvarg 包含無法強(qiáng)制轉(zhuǎn)換到指定類型的參數(shù)
DISP_E_PARAMNOTFOUND 期望的參數(shù)未找到潭陪,通過 pArgErr 返回第一個出錯的參數(shù)序號
DISP_E_TYPEMISMATCH 參數(shù)的類型錯誤气堕,通過 pArgErr 返回第一個出錯的參數(shù)的序號
DISP_E_UNKNOWNINTERFACE IID 參數(shù)出錯,這個參數(shù)必須是 IID_NULL
DISP_E_UNKNOWNLCID 包含字符串參數(shù)畔咧,并且 LocaleID 表示的區(qū)域和語言無法識別
DISP_E_PARAMNOTOPTIONAL 遺漏了必需的參數(shù)
  • 如果這個組件封裝了 COM 對象,Invoke 提供訪問 COM 對象的屬性和調(diào)用 COM 對象的方法揖膜。
  • 如果組件封裝的是 IDispatch 接口誓沸,Invoke 會調(diào)用 IDispatch 的 Invoke 方法,并且把參數(shù)傳遞給 IDispatch 的 Invoke 方法壹粟;
  • 參數(shù)所需的 DISPID 需要使用 GetIDsOfNames 方法獲取拜隧。

例:

LPCWSTR name = L"FuncName";
LCID lcid = GetThreadLocale();

DISPID dispid;
HRESULT hr = GetIDsOfNames(IID_NULL, (LPWSTR*)(&name), 1, lcid, &dispid);
System::Win::Comobj::OleCheck(hr);

WORD wFlags = DISPATCH_METHOD;

DISPPARAMS params;
::ZeroMemory(&params, sizeof(params));

VARIANT retVal;
::VariantInit(&retVal);

EXCEPINFO ExcepInfo;
::ZeroMemory(&ExcepInfo, sizeof(ExcepInfo));

UINT ErrArg = 0;

hr = Invoke(dispid, IID_NULL, lcid, wFlags, &params, &retVal, &ExcepInfo, &ErrArg);
if(hr == S_OK)

參考:


C++ Builder 參考手冊 ? TComponent ? Invoke

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趁仙,隨后出現(xiàn)的幾起案子洪添,更是在濱河造成了極大的恐慌,老刑警劉巖雀费,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件干奢,死亡現(xiàn)場離奇詭異,居然都是意外死亡盏袄,警方通過查閱死者的電腦和手機(jī)忿峻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門薄啥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逛尚,你說我怎么就攤上這事垄惧。” “怎么了绰寞?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵到逊,是天一觀的道長。 經(jīng)常有香客問我滤钱,道長觉壶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任菩暗,我火速辦了婚禮掰曾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘停团。我一直安慰自己旷坦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布佑稠。 她就那樣靜靜地躺著秒梅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舌胶。 梳的紋絲不亂的頭發(fā)上捆蜀,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音幔嫂,去河邊找鬼辆它。 笑死,一個胖子當(dāng)著我的面吹牛履恩,可吹牛的內(nèi)容都是我干的锰茉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼切心,長吁一口氣:“原來是場噩夢啊……” “哼飒筑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绽昏,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤协屡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后全谤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肤晓,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了材原。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沸久。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖余蟹,靈堂內(nèi)的尸體忽然破棺而出卷胯,到底是詐尸還是另有隱情,我是刑警寧澤威酒,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布窑睁,位于F島的核電站,受9級特大地震影響葵孤,放射性物質(zhì)發(fā)生泄漏担钮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一尤仍、第九天 我趴在偏房一處隱蔽的房頂上張望箫津。 院中可真熱鬧,春花似錦宰啦、人聲如沸苏遥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽田炭。三九已至,卻和暖如春漓柑,著一層夾襖步出監(jiān)牢的瞬間教硫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工辆布, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞬矩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓锋玲,卻偏偏與公主長得像丧鸯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嫩絮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349