关于c++中GetIDsOfNames与Invoke的使用~
2016-08-04 17:27
183 查看
最近在学习com接口,和A控件,当中有一个函数得到的值为一个LPDISPATCH指针,所以在这跟大家分享一下,怎么通过LPDISPATCH指针来调用com接口中的函数对象。
首先LPDISPATCH指向的是个com接口对象,我们可以先查到这个指针指向的接口它有哪些参数和方法
,比如我这个!
由此可见它的指向的是一个IMXDRAWRESBUF接口,接着我们再查查其中有哪些方法,如下:
发现里面有很多函数,接下来我们选择用Atstring这个函数,先查找一下它的参数:参数如下:
这下就知道它的传入参数只需要一个,返回值也知道了,接下来我们将调用GetIDsOfNames函数来得到一个指向这个函数的指针。
具体方法如下:
当中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的返回值就是我们需要的结果啦~
首先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的返回值就是我们需要的结果啦~
相关文章推荐
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- 关于在IAR使用嵌入式C++
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 漫漫编程路——C++篇(五)——关于使用静态成员
- 求解 关于 套汇问题 要求 使用 C++
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于对使用类实现C++指针功能性能打折扣的反驳
- 关于在c++的类中使用线程的问题
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- C++之父元旦专访(8+13个问题,关于C++的学习&使用和未来)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++之父元旦专访(8+13个问题,关于C++的学习&使用和未来)
- 关于c++ fstream的一个容易使用出错的地方。
- 关于C++中静态成员的使用