coledispatchdriver

class COleDispatchDriver
{
// Constructors
public:
 COleDispatchDriver();
 COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
 COleDispatchDriver(const COleDispatchDriver& dispatchSrc);

// Attributes
 LPDISPATCH m_lpDispatch;
 BOOL m_bAutoRelease;

// Operations
 BOOL CreateDispatch(REFCLSID clsid, COleException* pError = NULL);
 BOOL CreateDispatch(LPCTSTR lpszProgID, COleException* pError = NULL);

 void AttachDispatch(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
 LPDISPATCH DetachDispatch();
  // detach and get ownership of m_lpDispatch
 void ReleaseDispatch();

 // helpers for IDispatch::Invoke
 void AFX_CDECL InvokeHelper(DISPID dwDispID, WORD wFlags,
  VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, ...);
 void AFX_CDECL SetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
 void GetProperty(DISPID dwDispID, VARTYPE vtProp, void* pvProp) const;

 // special operators
 operator LPDISPATCH();
 const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);

// Implementation
public:
 ~COleDispatchDriver();
 void InvokeHelperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
  void* pvRet, const BYTE* pbParamInfo, va_list argList);
};

 

COleDispatchDriver没有基类。
COleDispatchDriver类实现OLE自动化中的客户方。OLE调度接口为访问一个对象的方法和属性提供了途径。COleDispatchDriver的成员函数连接,分离,创建和释放一个IDispatch类型的调度连接。其它的成员函数使用变量参数列表来简化调用IDispatch::Invoke。
这个类可以直接使用,但一般来说,它只是由用ClassWizard创建的类使用。
当你通过引用一个类型库来创建一个新的C++类时,ClassWizard从COleDispatchDriver派生出新类。
有关使用COleDispatchDriver的更多信息,参见下面列出的“Visual C++程序员指南”一书中的文章:
·自动化客户
·自动化服务器
·ClassWizard自动化支持
#include <afxdisp.h>


COleDispatchDriver成员函数

数据成员
m_bAutoRelease在执行ReleaseDispatch或析构对象时,指定是否要释放Idispatch
m_lpDispatch表示指向附着在这个COleDispatchDriver的IDispatch接口的指针

构造
COleDispatchDriver构造一个COleDispatchDriver对象

操作
CreateDispatch创建一个IDispatch连接并将它附着于COleDispatchDriver对象
AttachDispatch将一个IDispatch连接附着于COleDispatchDriver对象
DetachDispatch分开一个IDispatch连接,但并不释放它
ReleaseDispatch释放一个IDispatch连接
InvokeHelper用于调用自动化方法的助手
SetProperty设置一个自动化特性
GetProperty获得一个自动化特性

COleDispatchDriver::AttachDispatch

void AttachDispatch( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);

参数:
lpDispatch被附着于COleDispatchDriver对象的指向一个OLE IDispatch对象的指针。
bAutoRelease表明当对象超出范围时,是否要释放dispatch。

说明:
调用AttachDispatch成员函数可以将一个IDispatch指针附着于COleDispatchDriver对象上。这个函数释放任何已经附着于COleDispatchDriver对象的IDispatch指针。

COleDispatchDriver::COleDispatchDriver

COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch,BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);

参数:
lpDispatch指向一个被附着于COleDispatchDriver对象的OLE IDispatch对象的指针。
bAboutRelease当对象超出范围时,表明是否要释放这个dispatch。
dispatchSrc对一个已存在的COleDispatchDriver对象的引用。

说明:
构造一个COleDispatchDriver对象。
COleDispatchDriver(LPDISPATCH lpDispatch,BOOL bAutoRelease = TRUE)连接IDispatch接口。
COleDispatchDriver(const COleDispatchDriver& dispatchSrc)拷贝一个已存在的COleDispatchDriver对象,并增加引用计数。
COleDispatchDriver( )创建一个COleDispatchDriver对象,但不连接IDispatch接口。在使用一个没有参数的COleDispatchDriver( )之前,应该用COleDispatchDriver::CreateDispatch或者COleDispatchDriver::AttachDispatch为它连接一个IDispatch。


COleDispatchDriver::CreateDispatch

BOOL CreateDispatch(REFCLSID clsid, COleException* pError = NULL);
BOOL CreateDispatch(LPCTSTR lpszProgID, COleException* pError = NULL);

返回值:成功则返回非零值;否则返回0。

参数:
clsid要创建的IDispatch连接对象的类ID。
pError指向一个OLE异常对象的指针,这个异常对象将保存在创建中产生的状态码。
lpszProgID指向一个自动化对象的标识符的指针,如“Excel.Document.5”。将要创建的调度对象是为这个自动化对象创建的。

说明:
创建一个IDispatch对象并将它与COleDispatchDriver对象连接。

COleDispatchDriver::DetachDispatch

LPDISPATCH DetachDispatch();

返回值:
一个指向以前连接的IDispatch对象的指针。

说明:
将当前的IDispatch连接从对象上分离。但不释放这个IDispatch。

COleDispatchDriver::GetProperty

void GetProperty(DISPID dwDispID,VARTYPE vtProp,void* pvProp) const;

参数:
dwDispID标识需要获得的属性。这个值通常由ClassWizard提供。
vtProp指定要获取的属性。可能的取值可以参见COleDispatchDriver::InvokeHelper的说明部分。
pvProp用来接收属性值的变量的地址。它必须与vtProp所指定的类型相匹配。

说明:获取由dwDispID指定的对象属性。


COleDispatchDriver::InvokeHelper

void InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet, void* pvRet, const BYTE FAR* pbParamInfo, ...);
    throw(COleException);
    throw(COleDispatchException);

参数:
dwDispID标识要激活的方法或者属性。这个值常常由ClassWizard提供。
wFlag描述调用IDispatch::Invoke的前后关系的标志。其可能的取值参见Platform SDK。
vtRet指定返回值的类型。其可能的取值参见说明部分。
pvRet是将用来接收属性值或返回值的变量的地址。它必须与vtRet所指定的类型相匹配。
pbParamInfo是一个指向用空字符结尾的字符串的指针,这个字符串有多个字节用来指定紧跟pbParamInfo之后的参数的类型。
...参数变量列表,这些参数的类型在pbParamInfo中指定。

说明:
在由wFlags指定的前后关系中调用由dwDispID指定的方法或属性。参数pbParamInfo指定要传递给方法或属性的参数的类型。在语法说明中“...”所代表的就是参数的变量列表。
vtRet参数可能的取值来自于VARENUM枚举。
可能的取值如下所示:
符号返回类型
VT_EMPTYvoid
VT_I2short
VT_I4long
VT_R4float
VT_R8double
VT_CYCY
VT_DATEDATE
VT_BSTRBSTR
VT_DISPATCHLPDISPATCH
VT_ERRORSCODE
VT_BOOLBOOL
VT_VARIANTVARIANT
VT_UNKNOWNLPUNKNOWN
参数pbParamInfo是一个由空格分隔的有关VTS_常量的列表。这些值中的许多是由空格来分隔的(而不是逗号),它们指明了函数的参数列表。可能的取值由宏EVENT_CUSTOM列表给出。
此函数将参数转换为VARIANTARG值,然后激活IDispatch::Invoke方法。如果对Invoke的调用失败,这个函数将抛出一个异常。如果由IDispatch::Invoke返回的SCODE(状态码)是DISP_E_EXCEPTION,此函数抛出一个COleException对象;否则它抛出一个COleDispatchException。

COleDispatchDriver::ReleaseDispatch

void ReleaseDispatch();

说明:
释放IDispatch连接。如果这个连接已经设置为自动释放,则在释放这个接口之前,此函数将调用Dispatch::Release。

COleDispatchDriver::SetProperty

void SetProperty(DISPID dwDispID, VARTYPE vtProp, ...);

参数:
dwDispID标识要设置的属性。这个值常常由ClassWizard提供。
vtProp指明要设置的属性的类型。可能的取值参见COleDispatchDriver::InvokeHelper中的说明部分。
...由vtProp指明类型的单一参数。

说明:设置由dwDispID指定的OLE对象属性。

COleDispatchDriver::m_bAutoRelease

说明:
如果为TRUE,则当调用ReleaseDispatch或COleDispatchDriver对象被销毁时,由m_lpDispatch访问的COM对象将被自动释放。
缺省的,在构造函数中m_bAutoRelease被设置为TRUE。

COleDispatchDriver::m_lpDispatch


说明:
这是指向连接着COleDispatchDriver的IDispatch接口的指针。m_lpDispatch数据成员是一个类型为LPDISPATCH的公用变量。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值