首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ATL/COM 入門實戰:建立簡易 COM 伺服器與 VB/VC++ 客戶端測試

     編輯:關於VC++

教學目標

示範如何用 ATL 建立 COM 伺服器,並分別用 Visual C++ 與 Visual Basic 客戶端呼叫。不深入 COM 細節與 IDL,專為 VC++ 新手設計,讓你體會 ATL 建立 COM 物件的簡單性。

步驟 1:啟動 ATL COM 精靈

  1. 啟動 VC++,新建專案選 ATL COM Wizard,名稱 Simple_ATL。
  2. 確認 Server Type 為 Dynamic Link Library (DLL 伺服器)。
  3. 忽略其他核取方塊,按 Finish 產生檔案,按 OK 接受專案資訊。

步驟 2:新增 ATL 物件

  1. 在 ClassView 中右鍵 Simple_ATL Classes,選 New ATL Object。
  2. 預設 Simple Object 即為所需,按 Next。
  3. Short Name 輸入 First_ATL,精靈自動填寫其餘欄位。
  4. 切換 Attributes 標籤:
    • Threading Model:預設 Apartment (單元)
    • Interface:選 Dual (雙重)
    • Aggregation:選 No
  5. 忽略底部核取方塊,按 OK 完成。

步驟 3:新增方法

  1. 在 ClassView 右鍵 IFirst_ATL,選 Add Method。
  2. 回傳型別預設 HRESULT 通常不需改。方法名輸入 AddNumbers。
  3. 參數欄輸入:[in] long Num1, [in] long Num2, [out] long *ReturnVal(兩個輸入長整數、一個輸出指標)。按 OK。
  4. 展開樹狀檢視,雙擊 AddNumbers 插入實作代碼:
STDMETHODIMP CFirst_ATL::AddNumbers(long Num1, long Num2, long *ReturnVal)
{
    *ReturnVal = Num1 + Num2;
    return S_OK;
}

步驟 4:編譯 DLL

按 F7 編譯,編譯器會自動向登錄表註冊 DLL,供其他程式使用。

步驟 5:VB 測試 COM 伺服器

  1. 啟動 VB,建立 標準 EXE 專案,放置一個命令按鈕。
  2. 專案 → 參考,勾選 Simple ATL 1.0 Type Library。
  3. 雙擊按鈕加入代碼:
Private Sub Command1_Click()
    Dim objTestATL As SIMPLE_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
  1. 按 F5 執行,點擊按鈕即見結果。

步驟 6:VC++ 測試 COM 伺服器

  1. 關閉 Simple_ATL,新建 Win32 Console Application 名為 Test_ATL,接受預設值。
  2. Ctrl+N 新增 Test_ATL.cpp,加入代碼:
#include "..\Simple_ATL\Simple_ATL.h"
#include <iostream.h>

// 從 Simple_ATL_i.c 複製的常數
const IID IID_IFirst_ATL = {0xC8F6E230,0x2672,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}};
const CLSID CLSID_First_ATL = {0x970599E0,0x2673,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}};

void main(void) {
    HRESULT hr;
    IFirst_ATL *IFirstATL = NULL;
    hr = CoInitialize(0);
    if(SUCCEEDED(hr)) {
        hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER, IID_IFirst_ATL, (void**)&IFirstATL);
        if(SUCCEEDED(hr)) {
            long ReturnValue;
            IFirstATL->AddNumbers(5, 7, &ReturnValue);
            cout << "The answer for 5 + 7 is: " << ReturnValue << endl;
            IFirstATL->Release();
        } else cout << "CoCreateInstance Failed." << endl;
    }
    CoUninitialize();
}

步驟 7:編譯執行

F5 編譯,Ctrl+F5 執行,DOS 視窗顯示預期結果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved