我总结的几种简单的调用Com组件的方法
1.假如我们创建的Com组件的工程名叫TestCom,在其中添加了一个接口叫MyCom,接口名会自动命名为IMyCom,在其中添加两个方法,分别为:
- HRESULT Add([in] long n1,[in] long n2,[out,retval]long * pVal);
- HRESULT Cat([in] BSTR s1,[in] BSTR s2,[out,retval] BSTR * pVal);
HRESULT Add([in] long n1,[in] long n2,[out,retval]long * pVal); HRESULT Cat([in] BSTR s1,[in] BSTR s2,[out,retval] BSTR * pVal);
编绎成功后,会生成TestCom.dll
注意此时我们生成的Com组件层次即为:TestCom.IMycom.方法;
2.下面总结出调用该Com的几种方法:
- #include "stdafx.h"
- #include <atlbase.h>
- #import "G:\\workspace\\VC_WorkSpace\\TestCom\\Debug\\TestCom.dll" no_namespace
#include "stdafx.h"
#include <atlbase.h>
#import "G:\\workspace\\VC_WorkSpace\\TestCom\\Debug\\TestCom.dll" no_namespace
/*
注意:在导入了com的dll后,会在工程的exe目录下生成两个文件:TestCom.tlh与TestCom.tli,一个为定义文件,一个为实现文件,打开TestCom.tlh定义文件,会发现有类似这样几句:
_COM_SMARTPTR_TYPEDEF(IMyCom, __uuidof(IMyCom)); //该宏定义了指向接口IMyCom的指针IMyComPtr,以后的程序中可以直接用IMyComPtr这个指针类型。
struct __declspec(uuid("92e83a37-399a-47b1-bf6c-0ab052650cfe"))
MyCom; //该句定义了CLSID为"{92e83a37-399a-47b1-bf6c-0ab052650cfe}",通过它我们可以通过CLSIDFromString获取clsid;
struct __declspec(uuid("103b4c6e-3d3e-4e38-ab50-b9348465fc13"))
IMyCom : IDispatch //该句定义了接口ID:IID为"{103b4c6e-3d3e-4e38-ab50-b9348465fc13}",通过它我们可以通过IIDFromString获取接口iid;
CoCreateInstance函数就用到了上面两个做为参数来创建Com对象.
*/
第一种方法:
- int impl0()
- {
- CoInitialize(NULL);
- CLSID clsid;
- IID iid;
- HRESULT hr = CLSIDFromString(OLESTR("{92e83a37-399a-47b1-bf6c-0ab052650cfe}"),&clsid);
- if(NOERROR != hr){
- MessageBox(NULL,"ErrCLSIDFromString","ErrCLSIDFromString",MB_OK);
- return -1;
- }
- HRESULT hriid = IIDFromString(OLESTR("{103b4c6e-3d3e-4e38-ab50-b9348465fc13}"),&iid);
- if(S_OK != hriid){
- MessageBox(NULL,"ErrIIDFromString","ErrIIDFromString",MB_OK);
- return -1;
- }
- {
- CComPtr<imycom> pMyCom;
- pMyCom.CoCreateInstance(clsid);
- long ret;
- ret = pMyCom->Add(1,2);
- }
- CoUninitialize();
- return 0;
- }
int impl0()
{
CoInitialize(NULL);
CLSID clsid;
IID iid;
HRESULT hr = CLSIDFromString(OLESTR("{92e83a37-399a-47b1-bf6c-0ab052650cfe}"),&clsid);
if(NOERROR != hr){
MessageBox(NULL,"ErrCLSIDFromString","ErrCLSIDFromString",MB_OK);
return -1;
}HRESULT hriid = IIDFromString(OLESTR("{103b4c6e-3d3e-4e38-ab50-b9348465fc13}"),&iid);
if(S_OK != hriid){
MessageBox(NULL,"ErrIIDFromString","ErrIIDFromString",MB_OK);
return -1;
}{
CComPtr<imycom> pMyCom;
pMyCom.CoCreateInstance(clsid);
long ret;
ret = pMyCom->Add(1,2);
}
CoUninitialize();
return 0;
}
第二种方法:
- int impl1()
- {
- CoInitialize(NULL);
- CLSID clsid;
- CLSIDFromProgID(OLESTR("TestCom.MyCom"),&clsid); //"TestCom.MyCom"即为Dll名+Com对象名
- {
- CComPtr<imycom> pMyCom;
- pMyCom.CoCreateInstance(clsid);
- long ret;
- ret = pMyCom->Add(1,2);
- }
- CoUninitialize();
- return 0;
- }
int impl1()
{
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(OLESTR("TestCom.MyCom"),&clsid); //"TestCom.MyCom"即为Dll名+Com对象名
{
CComPtr<imycom> pMyCom;
pMyCom.CoCreateInstance(clsid);
long ret;
ret = pMyCom->Add(1,2);
}
CoUninitialize();
return 0;
}
第三种方法:
- int impl2()
- {
- CoInitialize(NULL);
- IMyComPtr Pt ;
- if (!SUCCEEDED(Pt.CreateInstance(__uuidof(MyCom))))
- {
- DWORD err;
- err = GetLastError();
- char Msg[128]={0};
- sprintf(Msg,"%d",err);
- MessageBox(NULL,Msg,"Err",MB_OK);
- return -1;
- }
- long ret = Pt->Add(1,2);
- CoUninitialize();
- return 0;
- }
int impl2()
{
CoInitialize(NULL);
IMyComPtr Pt ;
if (!SUCCEEDED(Pt.CreateInstance(__uuidof(MyCom))))
{
DWORD err;
err = GetLastError();
char Msg[128]={0};
sprintf(Msg,"%d",err);
MessageBox(NULL,Msg,"Err",MB_OK);
return -1;
}
long ret = Pt->Add(1,2);
CoUninitialize();
return 0;
}
第四种方法:
- int impl3()
- {
- CoInitialize(NULL);
- IMyComPtr Pt(__uuidof(MyCom)) ;
- long ret = Pt->Add(1,2);
- CoUninitialize();
- return 0;
- }
int impl3()
{
CoInitialize(NULL);
IMyComPtr Pt(__uuidof(MyCom)) ;
long ret = Pt->Add(1,2);
CoUninitialize();
return 0;
}
第五种方法:
- int impl4()
- {
- CoInitialize(NULL);
- IMyCom * pMyCom=NULL;
- CLSID clsid;
- IID iid;
- HRESULT hr = CLSIDFromString(OLESTR("{92e83a37-399a-47b1-bf6c-0ab052650cfe}"),&clsid);
- if(NOERROR != hr){
- MessageBox (NULL,"ErrCLSIDFromString","ErrCLSIDFromString",MB_OK);
- return -1;
- }
- HRESULT hriid = IIDFromString(OLESTR("{103b4c6e-3d3e-4e38-ab50-b9348465fc13}"),&iid);
- if(S_OK != hriid){
- MessageBox(NULL,"ErrIIDFromString","ErrIIDFromString",MB_OK);
- return -1;
- }
- if (!SUCCEEDED(::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,iid,(void**)&pMyCom)))
- {
- DWORD err;
- err = GetLastError();
- char Msg[128]={0};
- sprintf(Msg,"%d",err);
- MessageBox(NULL,Msg,"Err",MB_OK);
- return -1;
- }
- long ret;
- ret = pMyCom->Add(1,2);
- CoUninitialize();
- return 0;
- }
int impl4()
{CoInitialize(NULL);IMyCom * pMyCom=NULL;CLSID clsid;IID iid;HRESULT hr = CLSIDFromString(OLESTR("{92e83a37-399a-47b1-bf6c-0ab052650cfe}"),&clsid);if(NOERROR != hr){MessageBox (NULL,"ErrCLSIDFromString","ErrCLSIDFromString",MB_OK);
return -1;
}HRESULT hriid = IIDFromString(OLESTR("{103b4c6e-3d3e-4e38-ab50-b9348465fc13}"),&iid);
if(S_OK != hriid){MessageBox(NULL,"ErrIIDFromString","ErrIIDFromString",MB_OK);return -1;
}if (!SUCCEEDED(::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,iid,(void**)&pMyCom)))
{DWORD err;err = GetLastError();char Msg[128]={0};sprintf(Msg,"%d",err);MessageBox(NULL,Msg,"Err",MB_OK);return -1;
}long ret;
ret = pMyCom->Add(1,2);CoUninitialize();
return 0;
}
int main(int argc, char* argv[])
{
return impl0();
}
我总结的几种简单的调用Com组件的方法相关推荐
- 一种简单易用的台球瞄准方法——对称瞄准法
一种简单易用的台球瞄准方法 --对称瞄准法 台球运动是一种大众喜欢的休闲娱乐活动.在各类台球运动中,都需要使用主球把目标球击打进袋,在这个过程中,瞄准是击打进袋的重要一环. 台球瞄准的方法有很多种,比 ...
- 怎么给照片降噪?分享两种简单好用的图片降噪方法
怎么给照片降噪呢?大家在使用数码摄影的时候,相机将光线作为接收信号接收并输出的过程中,会产生图片中粗糙的部分,这本是不该出现的外来像素,导致拍出来的照片或多或少会出现噪点,让图片看起来不美观.这时候我 ...
- 一种简单快速有效的低照度图像增强方法
一种简单快速有效的低照度图像增强方法 一.本文介绍的是一种比较实用并且去阴影效果很好的方法,选自2004年Tao的一篇论文,名称是<An Integrated Neighborhood Depe ...
- 一种简单的蒙特卡洛树搜索并行化方法
监控未观察样本: 一种简单的蒙特卡洛树搜索并行化方法 Watch the Unobserved: a Sample Approach to Parallelizing Monte Carlo Tree ...
- 计算机房间墙壁的布置,11种简单且有特色的墙面布置方法
你有试着自己装点过自己房间的墙面吗?最简单也最快速的装饰方法就是用相片以及海报,但是时间久了就会发现似乎也歇缺乏新意,以下介绍了11种简单且有特色的墙面布置方法,运用的素材从杂志内页到相框.甚至地图都 ...
- 来总结一下在VC中调用COM组件的方法
来总结一下在VC中调用COM组件的方法(大家来补充) [问题点数:50分,结帖人_foo] http://bbs.csdn.net/topics/50319093 发表于: 2004-04-17 16 ...
- vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法
vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...
- Vue中父组件调用子组件的方法
场景 SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图: SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图_BADAO_LIUMANG_ ...
- Angular中父组件通过ViewChild调用子组件的方法
场景 Angualr中通过原生js和ViewChild的方式获取dom: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10586 ...
最新文章
- ASP.NET的一套笔试题
- 【下有对策】verycd没有的资源有很多方法下载
- vi测试仪维修成功率高吗?_电工电路板检测维修无图电路板的技巧
- python IP地址无效化
- Java语言描述 猴子吃桃问题(递归和循环写法)
- oracle tabs作用,Oracle 中 table 函数的应用浅析
- 字符串工具类,随机生成字符串
- android中怎么保存checkbox中的checked属性_第二十四天HTML中的form表单
- 给你一个亿-电视节目总结
- 基于rdf的php编程,RDF 简介
- 利用Outlook应用程序接口执行Shellcode
- 提取数据_提取图表曲线数据的方法
- c++ win10下 遍历文件夹的方式, dirent.h头文件缺失问题
- matlab t分布 反函数,Excel 应用TINV函数计算学生的t分布的反函数
- 手机ram内存测试软件,RAMTester(内存检测工具)
- PTA 发布关于巴基斯坦境内允许的频段和输出功率限制新规
- 苹果手机相机九宫格怎么设置_用苹果手机拍照,这3个媲美单反的设置不会用,就别说自己用苹果...
- 压缩照片怎么压缩?分享一个好用的方法
- C语言——PTA 埃尔米特多项式
- apk开发教程!了解Android架构组件后,构建APP超简单!先收藏了
热门文章
- CMD各段定义与分配方法指引
- 判断是否为二叉排序树的递归算法_左神直通BAT算法笔记(基础篇)
- python枪战项目计划书_人肉(共享)代购项目计划书(示例代码)
- 微型计算机物理地址转换,微型计算机及接口技术2015年4月真题试题(04732)
- vld不输出泄漏信息_光纤天线方案和泄漏电缆方案的比较
- 硬核项目 | 用Arduino做一个神奇的悬浮灯!
- 19岁「天才少年」自制CPU!1200个晶体管,纯手工打造
- 单片机到底是不是嵌入式?
- git branch 为什么会进入编辑状态_最好的Git分支管理教程
- mysql读取和写入的峰值_计算MySQL的内存峰值公式