vb般的VC++开发(4)--调用IDispatch接口的属性和方法

本文介绍了如何在VC++中通过IDispatch接口调用自动化对象的属性和方法,提供了一个名为CVB的辅助类,该类简化了VC++对IDispatch接口的使用,包括get和put方法以及多个参数的Invoke方法。
摘要由CSDN通过智能技术生成

    前面我们说过vb不仅支持一般的接口方法调用,还支持通过IDispatch接口进行自动化调用。通过#import,VC可以很好的支持一般的接口调用,但对IDispatch接口没有提供直接的支持。为了能方便的调用IDispatch接口,我们需要自己开发一个辅助类。我们先看一个例子:我们通过IDispatch接口调用IProvider接口中的属性和方法

 

 

  1. __interface IProvider: IDispatch
  2. {
  3.  [id(1),propget] HRESULT Value([out,retval] BSTR* pbstrValue);
  4.  [id(1),propput] HRESULT Value([in] BSTR bstrValue);
  5.  [id(2)] HRESULT Echo([in] BSTR bstrMessage1, [out,retval] BSTR* pbstrMessage2);
  6. };

vb

  1. '获取属性值
  2. sValue=oDispatch.Value
  3. '设置属性值
  4. oDispatch.Value=sValue
  5. '调用方法
  6. sMessage2=oDispatch.Echo("hello world!") 

vb般的vc++

  1. //获取属性值 
  2. _bstr_t bstrValue=CVB::get(pDispatch,L"Value");
  3. //设置属性值 
  4. CVB::put(pDispatch,L"Value",bstrValue);
  5. //调用方法 
  6. _bstr_t bstrMessage2=CVB::Invoke1( pDispatch, L"Echo", L"hello world!");

 

下面是CVB类的源代码,你也可以从CSDN资源直接下载

http://download.csdn.net/source/566053

 

  1. /* CVB by  Kevin
  2.    Version 1.0 (2008-08-01)
  3. ----------------------------------------
  4. email:     heart@pimshell.com
  5. homepage:  http://www.pimshell.com
  6. License
  7. -------
  8. Feel free to use this class, as long as you don't claim that you wrote it
  9. and this copyright notice stays intact in the source files.
  10. If you use this class in commercial applications, please send a short message
  11. to heart@pimshell.com
  12. Version history
  13. ---------------
  14. - 1.0 initial release
  15. */
  16. #pragma once
  17. #include <dispex.h>
  18. ///
  19. __declspec(selectany) VARIANT vtEmpty={VT_EMPTY};
  20. __declspec(selectany) VARIANT vtNull={VT_NULL};
  21. ///
  22. #define DISPATCH_METHOD_EX         0x10
  23. ///
  24. #define __SAFECALL_BEGIN /
  25.     try{/
  26.         
  27. #define __SAFECALL_END /
  28.         /
  29.     }/
  30.     catch(_com_error& e){/
  31.         return e.Error();/
  32.     }/
  33.     catch(...){/
  34.         return E_FAIL;/
  35.     }/
  36.     r
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值