ATL程式設計初級教程

2021-06-02 00:11:20 字數 3367 閱讀 9509

介紹

本教程的目的是告訴你如何使用atl建立乙個com伺服器,並使用visual c++和visual basic程式來分別呼叫這個伺服器。我並不想深入**com的細節,也不想讓你深陷於idl之中。這一教程只是為vc++的新手程式設計師設計的,告訴他們利用atl來建立乙個com物件有多麼簡單,並讓他們能對atl產生更多的興趣。

第1步:啟動atl com wizard

你所需要做的第一件事情就是啟動visual c++並建立乙個新的工程,選擇「atl com wizard」,工程名為「******_atl」。設定好工程的路徑之後,單擊ok按鈕。你會看到,螢幕上給了你若干選項。第乙個選項為「server type」。我們將要建立乙個伺服器dll,所以請確認伺服器的型別選為「dynamic link library」。我們並不需要關心下面的其它三個核取方塊,所以我們可以將它們忽略掉。按下finish按鈕,這樣嚮導就會為你產生適當的檔案了。之後,乙個「new project information」視窗就會出現,你可以從上面得知嚮導都會建立什麼檔案,按下「ok」接受這一切。

第2步:建立乙個新的atl物件

請確認你能在vc++的ide中看到workspace view,如果不能的話則請單擊「view」選單,然後選擇「workspace」。在這個檢視中你會看到三個選項卡,請單擊「classview」欄,你應該會看到「******_atl classes」。請在此右擊滑鼠鍵,並在彈出選單中選擇「new atl object」,你將會看到下面這樣的視窗:

預設的選擇項「****** object」就是我們所要的了,請單擊next按鈕,你會來到「atl object wizard properties」視窗中。在「short name」文字框中輸入「first_atl」。請注意,這時候嚮導就會自動地填寫其它的文字框。然後,單擊頂部的「attributes」標籤,在這裡你需要做一些選擇。第一項執行緒模型(threading model)的選擇,我們選擇預設的單元(apartment)模型。對於介面(inte***ce),我們選擇雙重(dual)。最後,因為我們的程式與聚合(aggregation)無關,所以我們選擇「no」的單選按鈕。你不必關心底部的三個核取方塊,直接單擊ok就可以了,這時候嚮導就會為我們建立乙個新的atl簡單物件。

第3步:新增乙個方法

如果你現在在工作區中單擊了「classview」標籤,那麼你會注意到嚮導在其中新增了一串東西。我們想新增的第乙個東西是乙個方法,可以在「ifirst_atl」上右擊滑鼠鍵,並選擇「add method」。

一旦你單擊了「add method」之後,你就會看到「add method to inte***ce」視窗。在返回值型別(return type)處你會看到,這個方法會預設返回hresult,在大多數情況下你不需要改變它。下乙個文字框允許我們輸入方法的名稱,我們可以輸入「addnumbers」。最後乙個文字框是讓我們輸入引數的,由於我們想做兩個數的相加並獲得乙個返回的結果,所以我們需要三個引數,並且最後乙個引數是乙個指標。現在,我們不必看那關於idl的300頁教程了,可以直接在引數文字框中輸入:

[in] long num1, [in] long num2, [out] long *returnval

簡單地說來,我們宣告了兩個long型別的引數,這兩個值是傳入的([in]),還有乙個最後傳出的返回值結果([out])。(你第一次看到這樣的東西可能會有些奇怪,但是如果你讀了一兩本關於com的書的話,就會覺得親切多了。)現在就可以單擊ok按鈕了。然後,單擊「classview」標籤,並展開所有的「+」標誌,使得樹型檢視完全展開。你會在介面(ifirst_atl)的頂部看到我們的「addnumbers」方法以及我們給予它的引數。在這個方法上雙擊滑鼠鍵,並插入以下的**:

stdmethodimp cfirst_atl::addnumbers(long num1,

long num2, long *returnval)

第4步:編譯dll

無論你相信與否,你已經擁有乙個用atl編寫的com伺服器了!當然,我們還需要編譯它。請按下f7鍵,這樣vc++就可以編譯了。編譯器工作片刻後就會在登錄檔中註冊你的新dll了,這樣一來其它的程式就可以使用它了。讓我們來測試一下。

第5步:在visual basic中測試com伺服器

那麼,先讓我們用vb來測試這個com伺服器吧。(如果你沒有vb的話,你可以跳過這一節,直接在vc++中測試。)啟動vb,並選擇「標準exe(standard exe)」建立工程,並在對話方塊上放置乙個命令按鈕。現在,我們需要新增com伺服器的引用,請單擊「工程(project)」選單並選擇「引用(references)」,找到「****** atl 1.0 type library」並選擇它。

單擊確定(ok)按鈕之後,你可以雙擊先前放置的命令按鈕,vb會切換到這個按鈕的**視窗。新增以下的**:

private sub command1_click()

dim objtestatl as ******_atllib.first_atl

set objtestatl = new first_atl

dim lngreturnvalue as long

objtestatl.addnumbers 5, 7, lngreturnvalue

msgbox "the value of 5 + 7 is: " & lngreturnvalue

set objtestatl = nothing

end sub

如果你是個vb的程式設計師,那麼這些**對於你是很直觀的:我們宣告了乙個物件,並從com伺服器呼叫「addnumbers」的方法,然後顯示結果。現在按下f5來執行這個vb工程,單擊命令按鈕,你就會看到期望的結果了:

並不是很難吧?那麼我們再來一次,這一次用vc++。

第6步:在visual c++中測試com伺服器// 你需要指明******_atl工程的路徑來引用這個標頭檔案

#include "..\******_atl\******_atl.h"

#include

// 把以下的內容從******_atl工程目錄的******_atl_i.c檔案中複製過來

// 注意:你也可以直接包含******_atl_i.c檔案,我在此只想清楚地表明這些const常量來自何處以及它們的樣子

const iid iid_ifirst_atl =

};const clsid clsid_first_atl =

};void main(void)

else

}// 解除安裝com

couninitialize();

}第7步:編譯並執行程式

現在你可以按下f5鍵來編譯程式,然後按下ctrl+f5來執行之。你應該可以看到乙個dos視窗,給出了你所期望的結果。

ATL程式設計初級教程

文章 http hi.baidu.com hot blood2001 blog item fbe8f76238b61bdfe7113ad5.html 介紹 本教程的目的是告訴你如何使用atl建立乙個com伺服器,並使用visual c 和visual basic程式來分別呼叫這個伺服器。我並不想深入...

HLSL初級教程

hlsl 初級教程 trcj 目錄 前言1.hlsl 入門1.1 什麼是著色器 1.2什麼是 hlsl 1.3怎麼寫hlsl 著色器1.4 怎麼用hlsl 著色器2.頂點著色器 2.1可程式設計資料流模型 2.2頂點宣告 2.3用頂點著色器實現漸變動畫 3.畫素著色器 3.1多紋理化 3.2多紋理效...

SubVersion初級教程

don t tell me why,just tell me how.1 找個rpm或者bin或者tar之類的安裝包,把subvesion安裝好。裝好之後client server admin都在你機器上了。2 首先在你中意的目錄,比如根目錄 下,執行 svnadmin create svnroot...