用VC++生成接口的COleDispatchDriver包装类来调用COM组件
2011-02-19 21:44
471 查看
一般地,可以使用CoCreateInstance来调用COM组件。但对于实现了IDispatch接口的COM组件,还有更容易的方法——用VC++自动生成接口的COleDispatchDriver包装类来调用COM组件。
举例说明:在VC++中执行脚本语句,比如VBScript语句。
系统提供了一个控件:C:\WINDOWS\system32\msscript.ocx,它提供了一个叫做IScriptControl的接口,通过它,我们就可以执行脚本语句了。
1.用VC++自动创建包装类
用VC++建立一个支持MFC的工程,添加一个类,选择“类型库中的MFC类”,再选择msscript.ocx文件,并将IScriptControl添加到右栏,如下图:
点击完成后即可生成CScriptControl包装类。
2.使用生成的类
[align=left] //初始化COM库[/align]
[align=left] CoInitialize(NULL);[/align]
[align=left] [/align]
[align=left] //创建MSScriptControl.ScriptControl实例[/align]
[align=left] //这个名称(ProgId)可以通过VC++目录下的小工具oleview得到。[/align]
[align=left] CScriptControl js;[/align]
[align=left] if (js.CreateDispatch("MSScriptControl.ScriptControl"))[/align]
[align=left] {[/align]
[align=left] //设置当前使用的脚本语言[/align]
[align=left] js.put_Language("JScript");[/align]
[align=left] //执行语句,执行完成后var中即包含了表达式的结果[/align]
[align=left] VARIANT var=js.Eval("1.234+5.31");[/align]
[align=left] //释放接口[/align]
[align=left] js.ReleaseDispatch();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //关闭COM库[/align]
CoUninitialize();
3.本例的其他用处
可以很方便将这点代码封装为一个表达式计算器。
举例说明:在VC++中执行脚本语句,比如VBScript语句。
系统提供了一个控件:C:\WINDOWS\system32\msscript.ocx,它提供了一个叫做IScriptControl的接口,通过它,我们就可以执行脚本语句了。
1.用VC++自动创建包装类
用VC++建立一个支持MFC的工程,添加一个类,选择“类型库中的MFC类”,再选择msscript.ocx文件,并将IScriptControl添加到右栏,如下图:
点击完成后即可生成CScriptControl包装类。
2.使用生成的类
[align=left] //初始化COM库[/align]
[align=left] CoInitialize(NULL);[/align]
[align=left] [/align]
[align=left] //创建MSScriptControl.ScriptControl实例[/align]
[align=left] //这个名称(ProgId)可以通过VC++目录下的小工具oleview得到。[/align]
[align=left] CScriptControl js;[/align]
[align=left] if (js.CreateDispatch("MSScriptControl.ScriptControl"))[/align]
[align=left] {[/align]
[align=left] //设置当前使用的脚本语言[/align]
[align=left] js.put_Language("JScript");[/align]
[align=left] //执行语句,执行完成后var中即包含了表达式的结果[/align]
[align=left] VARIANT var=js.Eval("1.234+5.31");[/align]
[align=left] //释放接口[/align]
[align=left] js.ReleaseDispatch();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //关闭COM库[/align]
CoUninitialize();
3.本例的其他用处
可以很方便将这点代码封装为一个表达式计算器。
相关文章推荐
- VB下继承VC接口生成COM组件
- COM 组件设计与应用(十一)IDispatch 及双接口的调用
- 对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。
- COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
- COM 组件设计与应用(十一)---IDispatch 及双接口的调用
- COM 组件设计与应用(十)——IDispatch 接口 for vc.net
- 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET
- VC2015调用COM组件
- COM 组件设计与应用11 - IDispatch 及双接口的调用
- COM 组件设计与应用(十一)——IDispatch 及双接口的调用
- 【转载】COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
- 此操作失败的原因是对 IID 为“{000208DA-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface
- COM 组件设计与应用(十)——IDispatch 接口 for VC.NET
- COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
- vc中调用Com组件的所有方法详解
- COM 组件设计与应用(十一)--IDispatch 及双接口的调用
- 总结VC程序中调用服务组件COM的方法
- 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:
- 这是我学习COM遇到的几个基本问题其解决 黄森堂(vcmfc)著 1.我用ATL生成一个组件对象,我在COM中使用IDD_IEncrypt,这个在哪里写义,是啥?GUID? 答:IDD_IEncry
- COM 组件设计与应用(十一)IDispatch 及双接口的调用