天天看點

vs2005 開發 COM--第一個程式

開發環境--vs2005

一、建立一個atl工程:

選擇ATL項目,

vs2005 開發 COM--第一個程式

點選完成,就是一個屬性的設定項目,保持預設屬性,再點選完成:

vs2005 開發 COM--第一個程式

就可以看見有這麼幾個類,如圖:

vs2005 開發 COM--第一個程式

第二步:

項目菜單,添加新類,彈出一個對話框,出現一個如下:

并且分别輸入類名,和進行相應的設定!

vs2005 開發 COM--第一個程式
vs2005 開發 COM--第一個程式
vs2005 開發 COM--第一個程式

第三:

在類視圖裡面給IFirst_ATL接口添加一個方法AddNumbers(),如圖:

vs2005 開發 COM--第一個程式

不用下一步,直接完成就是了。

第四步:

我們來到這個檔案First_ATL.cpp,添加如下内容:

*ReturnVal = Num1 + Num2;

也就是在如下函數裡面:

STDMETHODIMP CFirst_ATL::AddNumbers(LONG Num1, LONG Num2, LONG* Returnval)

{

 // TODO: 在此添加實作代碼

 *ReturnVal = Num1 + Num2;

 return S_OK;

}

可以了,編譯一下,通過的話。進入下一步,寫測試程式:

第五步:寫測試程式:

關閉目前工程。建立一個win32控制台的程式,内容如下:

#include "stdafx.h"

#include <iostream>

using namespace std;

#include "../../simple_ATL/simple_ATL/simple_ATL.h"

#include "../../simple_ATL/Simple_ATL/Simple_ATL_i.c"

// 從Simple_ATL 工程所在目錄的Simple_ATL_i.c 檔案中拷貝以下内容

// 注意: 你也可以不拷貝這些東西,而是把檔案Simple_ATL_i.c包含進來。

// 我之是以将它拷進來,是想更清楚地展示這些敞亮來自什麼地方一擊它們的代碼

void main(void)

{

// 聲明HRESULT和Simple_ATL接口指針

HRESULT hr;

IFirst_ATL *IFirstATL = NULL;

// 初始化COM

hr = CoInitialize(0);

// 使用SUCCEEDED 宏并檢查我們是否能得到一個接口指針

if(SUCCEEDED(hr))

{

hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER,

IID_IFirst_ATL, (void**) &IFirstATL);

// 如果成功,則調用AddNumbers方法,否則顯示相應的出錯資訊

if(SUCCEEDED(hr))

{

long ReturnValue;

IFirstATL->AddNumbers(5000, 7, &ReturnValue);

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

IFirstATL->Release();

}

else

{

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

}

}

// 釋放COM

CoUninitialize();

}

輸出結果:

5007

有一點要注意,包含頭檔案時候,要麼用絕對路徑,要麼相對路徑,但是路徑一定要找對!