zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    IOS 网络编程 + 后台保持连接
    iOS 通过代码关闭应用程序
    iOS 委托和协议区别和联系
    对于WIFI版ipad(无GPS芯片)定位功能的释疑
    iOS单例
    svn不能添加.a文件的解决方法
    mac下SVN上传.a静态库文件
    iOS7 兼容及部分细节
    app被Rejected 的各种原因翻译
    iOS 沙盒购买,弹出“需要验证”,“继续登录”的问题?
  • 原文地址:https://www.cnblogs.com/findumars/p/7635929.html
Copyright © 2011-2022 走看看