作者: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. 编程算法 - 远征队(expedition) 代码(C)

    远征队(expedition) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 远征队有一辆卡车须要行驶L单位的距离, 開始时, 车上有P单位的 ...

  2. [Compose] 11. Use Task for Asynchronous Actions

    We refactor a standard node callback style workflow into a composed task-based workflow. For example ...

  3. css画电脑键盘

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 不使用left-join等多表关联查询,只用单表查询和Java程序,简便实现“多表查询”效果

    上次我们提到,不使用left-loin关联查询,可能是为了提高效率或者配置缓存,也可以简化一下sql语句的编写.只写单表查询,sql真得太简单了.问题是,查询多个表的数据还是非常需要的. 因此,存在这 ...

  5. 【codeforces 757A】Gotta Catch Em' All!

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. hdfs的基本原理和基本操作总结

    hdfs基本原理 Hadoop分布式文件系统(HDFS)被设计成适合执行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有非常多共同点. 但同一时候,它和 ...

  7. erlang与c之间的连接

    http://blog.chinaunix.net/uid-22566367-id-382012.html erlang与c之间的连接参考资料:网络资料作者:Sunny    在Programming ...

  8. 小强的HTML5移动开发之路(35)——jQuery中的过滤器详解

    1.基本过滤选择器 :first :last :not(selector) :selector匹配的节点之外的节点 :even :偶数 :odd :奇数 :eq(index) :gt(index) : ...

  9. System and method for dynamically adjusting to CPU performance changes

    FIELD OF THE INVENTION The present invention is related to computing systems, and more particularly ...

  10. boost1.59编译安装(可以完全安装,也可定制安装--buildtype=complete,link=static)

    1.下载: 网址:http://sourceforge.net/projects/boost/files/boost/1.59.0/ 选择:boost_1_59_0.7z或者boost_1_59_0. ...