首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

LPDISPATCH该如何用

2012-01-19 
LPDISPATCH该怎么用?class Selection : public COleDispatchDriver{public:Selection() {}// Calls COleDi

LPDISPATCH该怎么用?
class Selection : public COleDispatchDriver
{
public:
Selection() {}// Calls COleDispatchDriver default constructor
Selection(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
Selection(const Selection& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

// Attributes
public:

// Operations
public:
  //....省略
LPDISPATCH GetTables();
LPDISPATCH GetWords();
LPDISPATCH GetSentences();
LPDISPATCH GetCharacters();
LPDISPATCH GetFootnotes();
LPDISPATCH GetEndnotes();

  //....省略
--------------------------------------
LPDISPATCH Selection::GetWords()
{
LPDISPATCH result;
InvokeHelper(0x33, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH:Accesses the underlying IDispatch pointer of the COleDispatchDriver object.
这些个类是定义在msword.h和msword.cpp源自msword.olb文件(严格叫法我也不知道,只把COM看了几天,迷迷糊糊的)

现在我是想得到读取.doc文件里面返回的内容,但是它返回的是LPDISPATCH即IDispatch指针,这个有什么用呢?要怎么样才能得到实际的内容呢?


[解决办法]
它是支持自动化的接口
主要的两个方法
GetIDsOfNames
Invoke 
可以通过 字符串 获得 一个方法的id
再通过 传入 invoke 调用组件的实际方法,
一般自动化是为了支持脚本
[解决办法]
楼主不要迷茫:
LPDISPATCH是COM编程中一项重大的接口应用,主要负责支持自动化的接口调用


我们在一般性的编程中,主要用它的两个方法: 

GetIDsOfNames

Invoke

前一个你传一个字符串给它,它返回ID,这个ID就是你要调用的功能

如何使用这个ID呢?就是第二个函数了。
呵呵,第二个函数就是通过这个ID调用的。
[解决办法]
MFC能为COM组件导出很多包装类,而你上面这些代码的包装类导出的LPDISPATCH最重要的目的,或者也可能是组件设计的目的,是要你看着办地强制转换,转换成实际的包装类。
LPDISPATCH的功能一楼二楼都说。
LPDISPATCH,能做很多事情,但你直接赤祼祼地用这个接口,像一楼二楼所说那些函数,一个函数一个函数地调,估计你以后看见LPDISPATCH都害怕。
直接操作LPDISPATCH,最好使用封装类,如CComDispatchDriver,进行简单包装。

热点排行