C++ VS 2008中ATL的創建,使用。並在C++項目中進行調用測試

一、前言
  1、本回講解的是在 VS 2008 下的使用ATL. 並使用Win 32 Console Application進行測試以及C#項目進行測試(調用COM).

    2、這第一個組件,除了所有 COM 組件必須的 IUnknown 接口外,我們再實現一個自己定義的接口 IFunTest,它有一個簡單的函數: Sum()完成兩個數值的加法

  3、ATL的介紹

      ATL本來被設計成一種書寫快捷的小的COM組件。

    ATL特性:(1)C++能完成的所有功能。

                     (2)沒有外部程序庫,除非你想要使用它。

                     (3) 一種抽象對象和接口的相對高級的方式。

        (4)類集合的自動處理,目標創建,參考計算和查詢界面。 標準接口的實現。

           (5) 用C++寫一個獨立的ActiveX控件,你必須親自書寫實現每個接口的每種方法。

二、1、創建ATL Project

步驟1:建立一個解決方案。   步驟2:在 該解決方案中,新建一個 vc++ 的 ATL 項目。見下圖

 選擇Dynamic-link library(DLL)

 2、向工程中添加ATL對象

 選擇ATL Simple Object

 名字爲FunTest

 Interface選擇Custom

 3、在接口中添加方法.(在類視圖中)

方法名爲Sum,參數如下圖,有三個參數

 

接口方法的實現, 這個太簡單了

STDMETHODIMP CFunTest::Sum(LONG num1, LONG num2, LONG* pVal)
{
    // TODO: Add your implementation code here
    *pVal = num1 + num2;
    return S_OK;
}

 

三、新建Win 32 Application進行測試

#include "E:\..\ATLProjectTest\ATLProjectTest_i.h"
#include "E:\..\ATLProjectTest\ATLProjectTest_i.c"
int main(void)
{
 
    //聲明HRESULT和iFun接口指針
    IFunTest * iFun = NULL;
 
    //初始化COM
    HRESULT hr = CoInitialize(NULL);
 
    //使用SUCCEEDED宏並檢查我們是否能得到一個接口指針
    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(CLSID_FunTest,NULL,CLSCTX_INPROC_SERVER,IID_IFunTest,(void**)&iFun);
    }
 
    //如果成功,則調用Sum方法,否則顯示相應的出錯信息
    if (SUCCEEDED(hr))
    {
        long ReturnValue;
        iFun->Sum(30,32,&ReturnValue);
        cout << "The return value for 30 + 32 is :" << ReturnValue << endl;
        iFun->Release();
    }
    else
    {
        cout << "CoCreateInstance Failed." << endl;
    }
    //釋放COM
    CoUninitialize();
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章