您的位置:首页 > 编程语言 > C语言/C++

关于c++中GetIDsOfNames与Invoke的使用~

2016-08-04 17:27 183 查看
最近在学习com接口,和A控件,当中有一个函数得到的值为一个LPDISPATCH指针,所以在这跟大家分享一下,怎么通过LPDISPATCH指针来调用com接口中的函数对象。

首先LPDISPATCH指向的是个com接口对象,我们可以先查到这个指针指向的接口它有哪些参数和方法

,比如我这个!

由此可见它的指向的是一个IMXDRAWRESBUF接口,接着我们再查查其中有哪些方法,如下:


发现里面有很多函数,接下来我们选择用Atstring这个函数,先查找一下它的参数:参数如下:



这下就知道它的传入参数只需要一个,返回值也知道了,接下来我们将调用GetIDsOfNames函数来得到一个指向这个函数的指针。

具体方法如下:

BSTR PropName[1];
DISPID PropertyID[1] = {0};

PropName[0] = SysAllocString(L"AtString");

HRESULT hr=a->GetIDsOfNames(IID_NULL, PropName, 1, LOCALE_USER_DEFAULT, PropertyID);


当中propName表示这个函数的名称,用DISPID变量Property来接受该函数的指针信息。

其中hr返回值可以帮助我们检索是否得到成功。

然后我们就可以用invoke函数来调用这个接口函数ATSTRING()啦

具体方法如下:CComVariant avarParams[1];
LONG vTotal = i;
avarParams[0].vt = VT_LPSTR;
avarParams[0] = &vTotal;
CComVariant Result;

DISPPARAMS params = { avarParams,
NULL, // Dispatch identifiers of named arguments.
1, // Number of arguments.
0 }; // Number of named arguments.
;
HRESULT hr2= a->Invoke(PropertyID[0],IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD,¶ms,&Result,NULL,NULL);其中ReSULT是用来接收返回值的,invoke第一个变量就填我们刚才得到的Property,invoke中需要注意的是第四个参数,DISPATCH_METHOD表示你要找接口中的方法函数,如果填成DISPATCH_PROPERTYGET代表你要找该接口的属性,刚开始我就在这里翻了船,params代表着输入者,这样result的返回值就是我们需要的结果啦~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: