程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> ATL/COM簡單工程

ATL/COM簡單工程

編輯:vc教程

  介紹

  本教程的目的是告訴你如何使用ATL創建一個COM服務器,並使用Visual C++和Visual Basic程序來分別調用這個服務器。我並不想深入探討COM的細節,也不想讓你深陷於IDL之中。這一教程只是為VC++的新手程序員設計的,告訴他們利用ATL來創建一個COM對象有多麼簡單,並讓他們能對ATL產生更多的興趣。

  第1步:啟動ATL COM Wizard

  你所需要做的第一件事情就是啟動Visual C++並創建一個新的工程,選擇“ATL COM Wizard”,工程名為“Simple_ATL”。設置好工程的路徑之後,單擊OK按鈕。你會看到,屏幕上給了你若干選項。第一個選項為“Server Type”。我們將要創建一個服務器DLL,所以請確認服務器的類型選為“Dynamic Link Library”。我們並不需要關心下面的其它三個復選框,所以我們可以將它們忽略掉。按下Finish按鈕,這樣向導就會為你產生適當的文件了。之後,一個“New Project Information”窗口就會出現,你可以從上面得知向導都會創建什麼文件,按下“OK”接受這一切。

  第2步:創建一個新的ATL對象

  請確認你能在VC++的IDE中看到Workspace View,如果不能的話則請單擊“View”菜單,然後選擇“Workspace”。在這個視圖中你會看到三個選項卡,請單擊“ClassView”欄,你應該會看到“Simple_ATL Classes”。請在此右擊鼠標鍵,並在彈出菜單中選擇“New ATL Object”,你將會看到下面這樣的窗口:

  默認的選擇項“Simple Object”就是我們所要的了,請單擊next按鈕,你會來到“ATL Object Wizard Properties”窗口中。在“Short Name”文本框中輸入“First_ATL”。請注意,這時候向導就會自動地填寫其它的文本框。然後,單擊頂部的“Attributes”標簽,在這裡你需要做一些選擇。第一項線程模型(Threading Model)的選擇,我們選擇默認的單元(Apartment)模型。對於接口(Interface),我們選擇雙重(Dual)。最後,因為我們的程序與聚合(Aggregation)無關,所以我們選擇“No”的單選按鈕。你不必關心底部的三個復選框,直接單擊OK就可以了,這時候向導就會為我們創建一個新的ATL簡單對象。

  第3步:添加一個方法

  如果你現在在工作區中單擊了“ClassView”標簽,那麼你會注意到向導在其中添加了一串東西。我們想添加的第一個東西是一個方法,可以在“IFirst_ATL”上右擊鼠標鍵,並選擇“Add Method”。

  一旦你單擊了“Add Method”之後,你就會看到“Add Method to Interface”窗口。在返回值類型(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)
{
  
        // TODO: Add your implementation code here
  
        *ReturnVal = Num1 + Num2;
  
        return S_OK;
}

本文示例代碼或素材下載

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved