ATL(COM) 开发下 -- VS2010

前面一章介绍了怎么创建ATL COM组件及注册,下面简单介绍如何调用COM组件。

1、在MFC中调用有一种很方便的方法,就是通过ClassWizard利用类型库生成包装类,不过有个前提就是com组件的接口必须是派生自IDispatch。
具体方法:
(1)VS2010新建一个MFC基于对话框程序,调出类向导,点击“添加类”下拉菜单,选择“类型库中的MFC类”(From a type libarary)。

(2)选“注册表”,然后在“可用类型库”中定位到FirstCOMLib<1.0>,接下来会出来该库中的所有接口,选择你想生成的接口包装类IFirstClass后点击“完成”,向导会自动生成相应的.h文件,这样你就可以在你的MFC工程中像使用普通类那样使用COM组件了.
(3)代码编写:

首先引入头文件   #include "CFirstClass.h"

为对话框程序添加一个“测试”按钮,添加按钮单击响应函数

void CFirstCOMTestDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    CoInitialize(NULL);
    CFirstClass m_mymath;
    if (!m_mymath.CreateDispatch(_T("FirstCOM.math.1")))//创建COM对象:这里的字符串一定要和注册表中的ProgID一致!!!
    {
        MessageBox(_T("创建COM组件失败:请检查ProgID是否正确,组件是否已经注册"));
        return;
    }
    else
    {
        long ret = m_mymath.Add(1,2);//调用COM接口
        CString strTemp;
        strTemp.Format(_T("%d"),ret);
        MessageBox(strTemp);
    }
    CoUninitialize();
}

 

关于m_mymath.CreateDispatch(_T("FirstCOM.math.1")) 中字符串"FirstCOM.math.1",其实跟我们上一章中定义类时ProgID有关,如果忘记,可以在FirstClass.rgs文件里找,rgs是组件注册的脚本文件,当你用 Regsvr32.exe注册组件时,组件内部便是调用了这个文件。rgs文件是以资源的形式存于DLL内的。

HKCR
{
    FirstCOM.math.1 = s ‘FirstClass Class‘
    {
        CLSID = s ‘{C56D80DE-DA4C-4731-81A6-48B8D0BDB2FD}‘
    }
    FirstCOM.math = s ‘FirstClass Class‘
    {
        CurVer = s ‘FirstCOM.math.1‘
    }  }

  

其中 CurVer=s‘FirstCOM.math.1‘ 中的 FirstCOM.math.1 就是我们需要的那个字符串。

(4)编译运行,点击测试按钮,结果如下:

2、在SDK中调用最简单最常用的一种,用#import导入类型库,利用VC提供的智能指针包装类

VS2010创建Win32控制台应用程序,编写如下代码:

#include "stdafx.h"  

#include "atlcomcli.h"
#import "FirstCOM.dll" no_namespace  

int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
    CLSID clsid;
    CLSIDFromProgID(OLESTR("FirstCOM.math.1"),&clsid);
    CComPtr<IFirstClass> pFirstClass;//智能指针
    pFirstClass.CoCreateInstance(clsid);
    long ret = pFirstClass->Add(1,2);
    printf("%d\n",ret);
    pFirstClass.Release();
    CoUninitialize();  

    return 0;
}

 其中头文件atlcomcli.h中定义了智能指针CComPtr。

运行结果:

还有一些调用COM组件的方法,参见VC调用COM组件

 

时间: 2024-08-10 15:02:27

ATL(COM) 开发下 -- VS2010的相关文章

Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本号的开发环境

2014-06-01 BaoXinjian In Capgemini 一.摘要 因为用户在调用Request时需输入很多参数,经过很多Form页面,如果想打印采购订单,发票,日记账时, 客户会要求在From中新增一个按钮,客户只需按这个按钮即可将采购订单进行输出,系统会自动调取采购订单页面上的数据,无需用户输入,实行自动化,增加用户交互性 一般这种需求有两种实现方式 通过custom.pll,用代码进行定制 通过form personalization,用设定进行定制 在调用程式时,一般会用到f

c++简单的ATL COM开发和调用实例

1.打开VS2010,新建ATL COM 项目,步骤:"文件" -->"新建" -->"项目",选择"Visual C++" -->"ATL 项目" ,填写"名称" FirstCOM -->"确定". 2.ATL 项目向导,勾选 [支持COM+ 1.0]和[支持部件注册器],其他默认,点击完成. 3.切换到类视图,右键单击项目"Fir

IOS 开发下拉刷新和上拉加载更多

IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh (4)MJRefresh (5)自己实现 2.AH3DPullRefresh实现下拉刷新和上拉下载的步骤 添加UIScrollView+AH3DPullRefresh.h 和UIScrollView+AH3DPullRefresh.m两个文件,由此可知,它是基于UIScrollView的方法. 在bu

敏捷开发下开发人员的幸福

我时常和朋友们分享着在敏捷开发下的工作经验-- 在敏捷开发下,不管你用任何的程序语言,技术,框架,敏捷实践,也不管你再牛逼, 随着客户的需求越来越多,你的系统的复杂度将呈现跳跃式的增长. "系统的复杂度,终有一天,会使你不再是个高效的工作者." "没有任何的一位老板,会满意开发人员写代码的效率的." 所以,开发人员一定要懂得,在敏捷开发下, 如何为自己创造幸福-- 相信只有自己,才能为客户创造幸福. 悲观的计划. 乐观的执行. 忠于自己的心,清楚的明白,自己所能掌控

基于cepark usb开发板 VS2010使用libusb-win32开发应用程序

软件使用环境: MFC程序开发: VS2010 操作系统:WIN7 开发板:cepark usb 1.    编写好下位机程序,这里直接使用圈圈的MyUsbHid,将USB设备连接到电脑: 2.    使用inf wizard安装驱动程序: 利用libusb-win32 的安装向导,也即inf wizard,这里使用的程序为cepark usb开发板的圈圈usbhid自定义程序,过程如下 最后选择install now,这样就把驱动安装好了.如果将这个USB设备插入到其它电脑,可以使用刚刚向导生

Win7下VS2010使用STLPort .

STLport的下载地址 http://sourceforge.net/projects/stlport/ 下载后,解压出文件.我的目录是 D:\STLport-5.2.1 . 右键计算机,属性,高级系统设置,环境,系统变量,编辑Path变量,添加;C:\Program Files\Microsoft Visual Studio 10.0\VC\bin.(我的路径是这样,分号是分隔符),确定.. 然后在 C:\Program Files\Microsoft Visual Studio 10.0\

VS2010 简单ATL COM开发

1.打开VS2010,新建ATL COM 项目,步骤:"文件" -->"新建" -->"项目",选择"Visual C++" -->"ATL 项目" ,填写"名称" FirstCOM -->"确定". 2.ATL 项目向导,勾选 [支持COM+ 1.0]和[支持部件注册器],其他默认,点击完成. 3.切换到类视图,右键单击项目"Fir

[转]windows下VS2010中lib与dll文件的生成与使用

原文地址:https://my.oschina.net/SysuHuyh5LoveHqq/blog/644622 近期在windows下开发了某个程序,需要将其生成静态文件(lib)以及动态库文件(dll),其中参考了不少帖子,有的讲得也不是很清楚明白,先将本人实践过的记录一下,供后期自己查询,也供各位大牛点评. 一.lib文件的生成与使用 1.lib的生成 相对来说,静态库文件还是比较容易生成和使用的,在代码上,貌似也不需要更改什么,举例说明: 头文件函数声明形式如下: extern bool

基于XP打造windows7的C++开发平台--vs2010+windows SDK for windows7

IT业是一个创造奇迹的行业,IT业也是一个年轻的行业,IT业更是一个不断更新的行业.在今年2009年,微软已经连续推出visual studio2010 beta1 与 visual studio2010 beta2 两个版本.在2010.2月就要推出正式版了,beta版本已经展示了visual studio2010的所有新特性与革新,自从visual studio 2002推出以来,visual studio 2002 -> 2003 ->2005 ->2008 ->2010,产