作者:kagula

日期:  2008-9-2

环境: [1]VisualStudio2005简体中文版(必需已经安装C语言开发环境支持)

[2]WinXP+SP3

读者要求:

初步使用过Visual C++2005

内容简介:

通过简述一个简单的ATL程序的建立过程,使大家对如何在VC2005下编写ATL程序有一个概念。

正文还包括,如何使用C++语言使用ATL程序提供的功能!

正文:

第一部分:新建ATL程序

步骤1:新建ATL项目,命名为a6

[打开VS2005 IDE]->[Visual C++]->[ATL]->[ATL项目]

全部选缺省选项

这里假定你的解决方案名称为a6,项目名称为a6

步骤2:添加ATL简单对象,命名为Simple

全部选缺省选项

[切换到类视图]->[鼠标右键点击a6出现菜单]->[选择 添加 类]->[出现对话框后]

->[选择 Visual C++ -> ATL -> ATL简单对象]

步骤3:为简单对象添加方法Add

[切换到类视图]->[鼠标右键点击ISimple(因为这时同名的有两个,选择interface的那一个)出现菜单]->[添加方法Add]->[打开Simple.c文件]

// CSimple  代码片断,其中红色部分是需要你手工添加的

STDMETHODIMP CSimple::Add(LONG op1, LONG op2, LONG* result)

{

// TODO: 在此添加实现代码

*result=op1+op2;

return S_OK;

}

步骤4:对项目a6进行编译

第二部分,新建测试ATL程序的C程序

步骤1:在当前解决方案中新建控制台程序项目a6_2

[鼠标点击菜单栏,文件]->[新建]->[项目]->[Visual C++]->[Win32]->[Win32控制台应用程序]->[输入项目名称为a6_2]

步骤2:打开a6_2.cpp文件,如下修改文件内容

// a6_2.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

// 在这里你需要包含本文第一部分内容生成的a6.h文件

#include "../a6/a6.h"

#include <iostream>

using namespace std;

// 复制 a6_i.c 文件中的IID_ISimple、CLSID_Simple值到

// 下面的两个常量中,16进制值书写格式要做点修改!

const IID IID_ISimple =

{0x19FC7FD3,0x0976,0x415F,{0xBD,0xA0,0xC3,0xA5,0xF2,0x77,0x21,0xDA}};

const CLSID CLSID_Simple =

{0x21D59135,0x6E35,0x4084,{0x9D,0xEA,0x63,0x25,0xC6,0xF8,0x6F,0x78}};

void main(void)

{

// 声明 HRESULT和指向ISimple的指针

HRESULT               hr;

ISimple             *pISimple;

// 现在我们初始化COM

hr = CoInitialize(0);

// 使用SUCCEEDED宏,然后来确定我们的接口指针

if(SUCCEEDED(hr))

{

hr = CoCreateInstance( CLSID_Simple, NULL, CLSCTX_INPROC_SERVER,

IID_ISimple, (void**) &pISimple);

// 如果成功,调用接口指针提供的Add方法

if(SUCCEEDED(hr))

{

long ReturnValue;

hr = pISimple->Add(5, 7, &ReturnValue);

cout << "The answer for 5 + 7 is: " << ReturnValue << endl;

hr = pISimple->Release();

}

else

{

cout << "CoCreateInstance Failed." << endl;

}

}

// 释放COM资源

CoUninitialize();

}

总结

使用ATL可以简化我们的COM编程,但这里仅是一个简单的例子,要学会使用ATL还有很长的路要走!

参考资料

[1]《A Simple COM Tutorial Using ATL》

http://www.codeguru.com/cpp/com-tech/atl/tutorials/article.php/c17__1

http://blog.csdn.net/lee353086/article/details/2865536

VS2005下第一个ATL的更多相关文章

  1. VS2005下开发PPC2003和WM50编译器一些设置

    1.vs2005开发WM5时,编译器和linker的选项配合问题 链接:http://www.mivi.name/blog/index_en.php?itemid=258 首先说ARM4 ARM4T ...

  2. Linux下配置一个VNC服务器

    在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...

  3. linux 下第一个cordova android app

    上篇博客写了linux下 cordova + ionic 环境的搭建 , 今天就来做下第一个app的简单讲解吧 首先昨天已经可以通过命令行的方式创建app了.经过今天好一段时间的研究发现使用 ioni ...

  4. 如何在Linux下拷贝一个目录呢

    cp -af newadmin/movie/.   uploadfile/mallvideo/ 如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了. 比如要把/home/usera拷贝到/m ...

  5. 在Linux下写一个简单的驱动程序

    本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...

  6. 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:

    在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...

  7. 可以把一堆dll文件放到程序目录下的一个自建目录里面

    窦宁波大哥哥的那篇文章的这种写法还是很有参考价值的. QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirP ...

  8. 如何在linux下制作一个windows的可启动u盘?

    如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...

  9. 【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间

    在windows下,一个文件有:创建时间.修改时间.访问时间.而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就是 ...

随机推荐

  1. tomcat自动URLDecode解码问题(+号变空格)

    最近项目中出现一个问题,就是前段调后端接口,参数带+号,传到后端后+号自动URLDecode成空格了. 1.问题排查 条件:tomcat配置server.xml有URIEncoding="U ...

  2. centos7 安装php环境和安装swoole

    这仅是我在网上找了多个解决方法,搞定了我遇到的问题,做的一个记录,买这个服务器就是为了测试swoole,结果快到期了,swoole还没装好 感谢https://www.cnblogs.com/phpw ...

  3. ASP.NET MVC中实现多个button提交的几种方法

    有时候会遇到这样的情况:在一个表单上须要多个button来完毕不同的功能,比方一个简单的审批功能. 假设是用webform那不须要讨论,但asp.net mvc中一个表单仅仅能提交到一个Action处 ...

  4. Velocity浅析及与Jsp、Freemarker对比 分类: B1_JAVA 2014-07-21 09:14 637人阅读 评论(0) 收藏

    转载自:http://www.cnblogs.com/petermsdn/archive/2011/05/06/2039178.html Velocity 是一个基于java 的模板引擎(templa ...

  5. 跟我学AngularJs:Service、Factory、Provider依赖注入使用与差别

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka        本教程使用AngularJs版本号:1.5.3        AngularJ ...

  6. jquery平滑滚动页面

    滚动到顶部 $('.scroll_top').click(function(){$('html,body').animate({scrollTop: '0px'}, 800);}); 滚动到指定位置 ...

  7. SetProcessWorkingSetSize() 方法使内存降低了很多(把内存放到交换区,其实会降低性能)——打开后长时间不使用软件,会有很长时间的加载过程,原来是这个!

    在项目中对程序性能优化时,发现用SetProcessWorkingSetSize() 方法使内存降低了很多,于是查阅了相关的资料如下: 我的程序为什么能够将占用的内存移至虚拟内存呢? 其实,你也可以, ...

  8. kali 系统的源

    sources.list deb http://http.kali.org/kali kali-rolling main non-free contrib deb http://mirrors.ust ...

  9. Bootstrap3简单好用,轻松实现手机适配

    个人官网http://FansUnion.cn,前端使用Bootstrap框架.大部分的样式,轻松就实现了. 只是呢,关于导航条,被无数网友吐槽了.      通过手机访问时,导航条把屏幕给完全占居了 ...

  10. as.data.frame一定要小心的一个參数stringsAsFactors

    假设说一个data.frame中的元素是factor.你想转化成numeric,你会怎么做?比方d[1,1]是factor   正确答案是 先as.character(x) 再as.numeric(x ...