IDispatch接口 - CComDispatchDriver智能指针
来源:互联网 发布:树莓派 重启网络 编辑:程序博客网 时间:2024/05/21 15:02
前面一篇文章讲述了怎么样通过GetIDsOfNames和Invoke来调用一个支持Idispach的COM组件。
看起来好像很麻烦,实际上,COM已经提供了一个专门的智能指针来解决这个问题。
CComDispatchDriver
看一下它的定义,实际上它就是一个特殊的CComQIPtr。
typedef CComQIPtr<IDispatch, &__uuidof(IDispatch)> CComDispatchDriver;如果COM组件不支持IDispatch的话,那么在创建CComDispatchDriver的时候一定会失败。
使用其实也很简单,直接看个例子好了。
使用例子
// ConsoleApplication4.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <thread>#include <atlbase.h>#include <atlcom.h>#include <algorithm>#include <vector>#include <memory>#include "../MyCom/MyCom_i.h"#include "../MyCom/MyCom_i.c"int _tmain(int argc, _TCHAR* argv[]){ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); CComDispatchDriver dsp; dsp.CoCreateInstance(CLSID_MyCar); CComVariant rt; dsp.GetPropertyByName(L"Gas", &rt); LONG total = rt.lVal; CComVariant p1; p1.vt = VT_I4; p1.lVal = 12; CComVariant p2; p2.vt = VT_I4 | VT_BYREF; LONG Gas = 0; p2.byref = &Gas; dsp.Invoke2(L"AddGas", &p1, &p2, NULL); CComVariant totalGas; dsp.GetPropertyByName(L"Gas", &totalGas); total = totalGas.lVal; dsp.Release(); CoUninitialize(); return 0;}这个代码很简单,看一下就知道怎么通过CComDispatchDriver来调用支持IDispatch接口的COM组件了。其实CComDispatchDriver内部还是通过GetIDsOfNames和Invoke等函数来调用COM组件的方法的。只是简化了用户使用。
0 0
- IDispatch接口 - CComDispatchDriver智能指针
- IDispatch接口 - CComDispatchDriver智能指针
- IDispatch接口 - Part II -CComDispatchDriver智能指针
- IDispatch 接口
- IDispatch接口
- IDispatch接口
- IDispatch接口
- IDispatch接口
- IDispatch接口是什么?
- VC6的IDispatch接口
- IDispatch接口的作用
- IDispatch接口的作用
- IDispatch接口的作用
- C++中IDispatch接口
- ATL IDispatch调度接口
- IDispatch 接口和双接口
- IDispatch接口原理与应用
- IDispatch接口原理与应用
- 第十六章 16.2.5节练习
- Hash和Bloom Filter
- 最小生成树 Prime算法 简单题
- Android 官方推荐 : DialogFragment 创建对话框
- 解决Mysql远程连接授权的问题
- IDispatch接口 - CComDispatchDriver智能指针
- C++ 智能指针详解
- C#字符串和ASCII码的转换
- SSH连接远程Linux服务器(C#)
- PKI入门级介绍
- RGB与HSI颜色空间互换函数(matlab)
- 数据挖掘十大经典算法
- Linux驱动 container_of
- C语言栈、堆、函数递归