ACE簡介以及ACE_DLL動態庫操作類的使用

 版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://egeho123.blogbus.com/logs/14071965.html
1 引言
接觸ACE已經有長一段時間了,但一直來沒有應用的實際需求,因此這方面的學習進展一直很慢,到目前才初步學習了一下日誌、TCP/UDP簡單網絡程序的編寫。最近由於工作需要的驅使,學習了ACE_DLL這個類。下面我將從一個完全初學者的角度,談談如何認識和了解ACE。
2 初識ACE
剛開始聽到ACE這個詞,我就對它產生了興趣,因爲據說它提供了跨平臺的網絡編程,能夠在UNIX下跑自己寫的網絡程序,興奮啊。於是第二天,就去書店買了本《ACE程序員指南》(Stephen D. Houston著,馬維達譯,中國電力出版社出版),那天晚上搞了很久終於在VC60上搭建了環境,跑了第一個程序,感覺非常良好。STOP!!!廢話不說了,下面轉入正題,談談ACE環境的搭建吧。
3  ACE開發環境的搭建
3獲取最新版的ACE安裝包
去這個網址(http://www.cs.wustl.edu/~schmidt/ACE.html)獲取一個最新發布(Latest Release)的ACE包,然後安裝到你的計算機上。
32 環境變量的設置
   假設你將ACE安裝到了“D:\ACE\ACE_wrappers”,那麼按照如下步驟進行環境變量的設置:
(1)     鼠標右擊“我的電腦”選擇“屬性-à高級-à環境變量”,出現以下界面:
圖1 ACE環境變量的設置
(2)     新建變量爲“ACE_ROOT,值爲“D:\ACE\ACE_wrappers”的環境變量。然後退出,重新啓動你的電腦,設置完後必須重啓電腦,才能生效!!!!!!!!!!!!!!!!!
33 編譯ACE
上面兩步做完了之後,我們需要自己編譯得到DLL和相應的LIB,我們需要進行兩次編譯。一次以DEBUG方法編譯,生成的DLLLIB名稱爲:ACEd.dllACEd.lib。另一次以RELESE方式編譯,生成的DLLLIB名稱爲:ACE.dllACE.lib
編譯完成之後,生成的動態庫都在“$ACE_ROOT\lib(即:D:\ACE\ACE_wrappers\lib)目錄下。
4 VS2003中設置環境
1)打開VS2003,選擇“工具à選項-àVC++目錄”,如圖二:
2 VS2003ACE包含目錄/lib庫路徑設置
(3)     選擇“包含文件”,將ACE_ROOT加進入,如圖3
3 ACE包含文件的添加
(4)     選擇“庫文件”,添加庫文件的路徑,(這個好象也可以不加哈,可以自己試一下看)如圖4
4 ACE 庫文件的添加
(5)     OK,開始測試一下,寫個HELLO WORLD吧。
5 寫一個HELLO WORLD
1)新建一個“MyFirstACE”的WIN32項目,如圖5
5:新建HELLO WORD
2)對工程進行設置,選“控制檯應用程序---》空項目”,如圖6
6 HELLO WORLD應用程序的設置
3)點“完成”,然後在解決方案管理器的源文件文件夾中添加一個MyFirstACE.cpp,如圖7
7 添家CPP文件
4)修改工程的設置(這一步很重要):
“項目---MyFirstACE屬性”,進入下面的屬性項設置界面,將運行時庫設置爲“多線程調試(MTd)”:
8 屬性項設置
   然後在將鏈接器的輸入項進行設置:如圖9
9:設置鏈接器輸入
點“確定”。
5)添加以下源代碼到CPP文件中:
#include "ace/Log_Msg.h"
#include <iostream>
using namespace std;
int main(int argc,char**)
{
     ACE_DEBUG((LM_INFO,ACE_TEXT("HELLO WORLD!")));
     cin.get();
     return 1;
}
6)編譯,哈哈,彈出下面的錯誤提示,圖10
10 出錯了
7趕快從$ACE_ROOT\lib中把ACEd.dllACEd.lib拷貝一份到現在的工程目錄的DEBUG文件夾下,如下圖11
11 DLLLIB拷貝到DEBUG文件夾
8再重新編譯一下吧:
12 HELLO WORLD
多了很多信息,這些是調試信息,可以用開關關閉的。
6 ACE_DLL動態庫操作類
ACE提供了很多很多工具給我們使用,最大優點就是跨平臺並且源代碼公開的。ACE_DLL類主要用於對DLL的操作。
61 成員列表
下面這個表格列舉了所有ACE——DLL的成員,包括從基類繼承的成員。

[explicit]
[explicit]
[private]
[private]
[private]
[private]
[private]
[private]
[private]
表一 ACE的所有成員列表
62 幾個關鍵的方法介紹:
參數說明:
1)dll_name:要打開的動態庫名稱;
2)open_mode:打開方式;
3)close_on_destruction:這個參數有兩個取值,1表示在析構的時候關閉打開的句炳,0表示不關閉;
4)如下面的例子:
     ACE_DLL *P = new ACE_DLL();//實例化一個DLL管理器
     P->open("CBase",ACE_DEFAULT_SHLIB_MODE,1);//打開一個名爲CBase的DLL,打開方法爲默認,是否關閉爲1
參數說明:
1)symbol_name:需要調用的DLL庫中的方法或對象的名稱;
2) ignore_errors:當值爲1時,在日誌中不生成錯誤信息,如果爲0,那麼在日誌中生成錯誤信息;
參數說明:
沒有參數,關閉打開的動態庫
6.3 一個詳細的例子介紹:
例子裏面:
1CSon繼承了CBase裏的一個純基類,編譯的時候,CSon需要依賴CBase
2CBase需要調用CSon裏面一個函數,得到基類的一個對象的指針,來使用。
3testacedllcall工程是用來調用CBase裏的函數,來測試的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章