VS2005下第一个ATL
作者: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的更多相关文章
- VS2005下开发PPC2003和WM50编译器一些设置
1.vs2005开发WM5时,编译器和linker的选项配合问题 链接:http://www.mivi.name/blog/index_en.php?itemid=258 首先说ARM4 ARM4T ...
- Linux下配置一个VNC服务器
在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...
- linux 下第一个cordova android app
上篇博客写了linux下 cordova + ionic 环境的搭建 , 今天就来做下第一个app的简单讲解吧 首先昨天已经可以通过命令行的方式创建app了.经过今天好一段时间的研究发现使用 ioni ...
- 如何在Linux下拷贝一个目录呢
cp -af newadmin/movie/. uploadfile/mallvideo/ 如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了. 比如要把/home/usera拷贝到/m ...
- 在Linux下写一个简单的驱动程序
本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程.相信这样由浅入深.由具体实例到抽象理论的描述更容易初学者入手Linux ...
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
- 可以把一堆dll文件放到程序目录下的一个自建目录里面
窦宁波大哥哥的那篇文章的这种写法还是很有参考价值的. QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirP ...
- 如何在linux下制作一个windows的可启动u盘?
如何在linux下制作一个windows的可启动u盘? 情景是这样的,有一个windows10的iso,现在想通过U盘安装,要求即支持UEFI(启动引导器),又支持Legacy(启动引导器),因为有一 ...
- 【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间
在windows下,一个文件有:创建时间.修改时间.访问时间.而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就是 ...
随机推荐
- vmware之linux不重启添加虚拟硬盘
转自http://www.shangxueba.com/jingyan/1610981.html #echo "- - -" > /sys/class/scsi_host/h ...
- debian 下的vi 上下左右键问题
小白一只,查了一下vi的版本信息 发现好像是vim 于是把~/.vimrc 变量设置了一下就好了。 将set compatible 设置成set nocompatible . 这是因为系统会默认vim ...
- Web前端--黑客技术揭秘(菜鸟知识)
一,Web安全的关键点 1.同源策略是众多安全策略的一个,是Web层面上的策略.很重要. 2.同源策略规定:不同域的client脚本在没明白授权的情况下.不能读写对方的资源. 3.同域要求两个网站同协 ...
- 记录一下phper的学习方向
我是一个懒惰的人,吃了多年技术老本儿,对新技术缺乏学习动力,仗着逻辑思维的优势处理问题 http://www.topthink.com/topic/26730.html
- ng-cli搭建angular项目框架
原文地址 https://www.jianshu.com/p/0a8f4b0f29b3 环境准备 以下步骤都不需要事先创建文件夹,只是环境的准备过程,只有到需要搭建项目的时候才需要创建文件夹用来存放项 ...
- Android怎样捕获应用的crash信息
转载请注明出处:http://blog.csdn.net/fishle123/article/details/50823358 我们的应用不可避免的会发生crash,假设是在调试阶段,我们能够使用Lo ...
- iOS开发RunnLoop学习二:GCD中的定时器
#import "ViewController.h" @interface ViewController () /** 注释 */ @property (nonatomic, st ...
- 摘录-解压版mysql配置(版本5.7)
1.下载解压2.创建my.ini文件基础配置:(注意编码必须为ANSI)#代码开始[Client]# 设置mysql客户端默认字符集default-character-set=utf8[mysqld] ...
- 日志框架logj的使用
log4j 简介 是什么? Apache的一个开源的.轻量级的.用于日志管理的框架 有什么? Log4j由三个重要的组件构成:日志信息的输出格式,日志信息的优先 级,日志信息的输出目的地. 1,日志信 ...
- produces在@requestMapping中的使用方式和作用
produces可能不算一个注解,因为什么呢,它是注解@requestMapping注解里面的属性项, 它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码: 还有一个属性与其对 ...