1. 程式人生 > >ATL--建立簡單的ATL之dll工程,新增類和類的介面並在MFC中呼叫

ATL--建立簡單的ATL之dll工程,新增類和類的介面並在MFC中呼叫

資源打包

開發環境

Windows Server 2012 

VS2010 Sp1

番茄助手

建立ATL簡單dll工程

1、開啟VS2010,新建ATL COM 專案,步驟:“檔案” <-->“新建” <-->“專案”,選擇“Visual C++” <-->“ATL 專案” ,填寫“名稱” DemoATL <-->“確定”。


接下來,下一步


接下來,下一步,ATL 專案嚮導,勾選 【支援COM+ 1.0】和【支援部件註冊器】,其他預設,點選完成。勾選 【支援COM+ 1.0】和【支援部件註冊器】使得程式可以在編譯完成以後自動就註冊成功,而無需手動進行dll的註冊了


建立完成之後工程的各個檢視的狀態資訊DemoATLPS是自動生成的東西,目前還不知道是幹神馬的


ATL工程新增類

切換到“類檢視”或者“解決方案檢視”,右鍵單擊專案“DemoATL”<-->“新增” <-->“類”


下一步,選擇“ATL”<-->“ATL簡單物件”,之後點選“新增”


下一步,在“簡稱”下填入要增加的類名稱,其他幾項自動填入,除了“ProgID”項除外。“ProgID”項需要自動填入,否則後面無法正確的呼叫該元件以及該元件的FirstClass介面


下一步,選擇“是”就闊以了


ATL給新生成的類新增介面Add

第一步,右鍵新建的介面選擇選單中的“新增”<-->"新增方法"


第二步

新增方法嚮導,在"方法名" 下輸入Add。

增加兩個輸入引數:勾選【in】,選擇引數型別LONG,輸入引數名para1,點選“新增”。同樣操作增加引數para2。

然後增加一個返回引數:先選擇引數型別LONG*,再勾選【retval】,輸入引數名result,點選新增。

點選“完成”即可,如果點選下一步,不需要填寫資訊,點選“完成”即可。


建立完類和類的介面之後的佈局圖


切換到解決方案資源管理器,展開專案“原始檔”, 雙擊 DemoATL.idl開啟IDL定義檔案,看到如下程式碼,就是定義的COM方法了。

雙擊開啟FirstClass.cpp 編輯程式碼:*result = para1 + para2;

編譯執行,會生成dll檔案,並自動註冊到系統中。

如果不能註冊DemoATL.dll下一個批處理檔案,進行註冊,注意註冊檔案的路徑選絕對路徑

@echo off
echo 預設情況下,不需要使用該批處理進行註冊,DemoALL工程編譯完成會自動註冊的
echo 請注意註冊的路徑
echo 如需註冊請刪除批處理檔案中的exit,執行DemoATL.dll的註冊
pause
exit

regsvr32   "D:\newSvnCode\COM\DemoATL\Debug\DemoATL.dll"

pause

反註冊批處理檔案程式碼,注意反註冊檔案的路徑選絕對路徑
@echo off
echo 一般情況下不需要執行反註冊
echo 請注意反註冊的路徑
echo 如需反註冊請刪除批處理檔案中的exit,執行DemoATL.dll的反註冊
pause
exit

regsvr32  /u  "D:\newSvnCode\COM\DemoATL\Debug\DemoATL.dll"

pause

通過MFC呼叫剛才建立的COM之ATL元件

新建一個MFC工程選對話方塊的即可,下圖是建立的基本配置,以後的步驟選對話方塊剩下的一路next就可以了


建立完成時候的工程佈局,並進行編譯


MFC中新增ATL生成的自動化介面

在MFC中呼叫有一種很方便的方法,就是通過ClassWizard利用型別庫生成包裝類,不過有個前提就是com元件的介面必須是派生自IDispatch。

VS2010新建一個MFC基於對話方塊程式,調出類嚮導,點選“新增類”下拉選單,選擇“型別庫中的MFC類”(From a type libarary)。


下一步

選“登錄檔”,然後在“可用型別庫”中定位到FirstCOMLib<1.0>,接下來會出來該庫中的所有介面,選擇你想生成的介面包裝類IFirstClass後點擊“完成”,嚮導會自動生成相應的.h檔案,這樣你就可以在你的MFC工程中像使用普通類那樣使用COM元件了.


新增類以後“類檢視”的狀態


編譯一下程式


接下來,首先引入標頭檔案   #include "CFirstClass.h"。為對話方塊程式新增一個“測試”按鈕,新增按鈕單擊響應函式


編譯除錯呼叫程式碼,OK