Friday, May 11, 2007

使用MFC建構具Automation功能的DLL(第一彈)

工作上需要在VB6呼叫VC6建構的library,那方法有下列幾種:
  1. 使用C介面輸出,在VB6中透過Declare...Lib方式引入。
  2. 使用ATL。
  3. 使用MFC,MFC+Automation或MFC ActiveX Control。
OK!講到這,我想大家都知道我選哪樣,為何ㄋㄟ?!因為就就建構COM的應用(Automation是COM一種應用!),MFC相較ATL簡單(可是 對很多人,兩樣都很難!),其原因是MFC的Wizard寫的比較好(這讓很多要入ATL之門的人為之氣結!)且比較好懂。(因為ATL使用大量的 template語法!);但就微軟已經揚棄的ActiveX技術來看,MFC所提供的,太肥了!不適合在網路上傳輸,那後來的COM+及.NET出來後 的ISAPI都是建議用或只能用ATL,所以ATL目前在COM相關應用是佔最重要的份量。 為求工作圖方便(其實是我ATL不熟!!),如題,那就是接下來所要展示的:
  1. 當然是透過最親愛的Project Wizard,建構個專案,這時要選擇MFC AppWizard(dll)
  2. 輸入專案名稱後就下一步,進入唯一的Wizard Page,那將Automation勾 選!就可一路OK,到進入IDE。
  3. 那接下來就在Class View選擇專案,右鍵彈出選單,選擇New Class...,出現一個Dialog如下:
  4. Bse classCombo Box選擇CCmdTarget, 那下面的Automation Radio boxes就 會被Enable,那選擇Creatable by type ID,如果選擇Automation的 話,VB6就不支援CreateObject的語法,建議type ID的格式為[Project Name].[Class Name]。
  5. OK!到這就在Class View可以產生一個類別且新增了一個Interface, 且Wizard會自動增加一個ODL檔。
  6. 接下來是新增屬性及方法,就是在Class View點選那個長得像尾巴打結的精蟲符號(我想很久,才想出這麼貼切的形容詞!),一樣,右鍵叫出Pop-up menu,選擇Add Method
  7. 到這步出現的Dialog是要建構Method用的,有幾個重要選項如下:
    1. External Name:輸入在VB6要看的名稱。
    2. Internal Name:輸入在對應類別的成員函式名稱。
    3. Return Value:我想大家都知道這是回傳值。
    4. Parameter list:輸入要傳入的引數。
  8. 這一步當然是要增加屬性,如同第六步,但是是選擇Add Property,會出現跟上一個Dialog超像的畫面,有幾個重要的項目如下:
    1. External name:輸入在VB6要看的名稱。
    2. Type:輸入在屬性的型別。
    3. Implementaion:要對應到類別的實做方法,有兩種可選,分別是Member variable及Get/Set methods。
夜已深!老婆催促我睡覺,那下次在把更多細節發佈!!

No comments: