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

来源:互联网 发布:杭州人工智能产业园 编辑:程序博客网 时间:2024/06/02 02:16

最近在学习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的返回值就是我们需要的结果啦~


1 0