ACE简介以及ACE_DLL动态库操作类的使用

本文详细介绍ACE跨平台网络编程库的安装配置过程,并通过一个简单的示例程序演示如何使用ACE_DLL类加载和调用动态链接库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  版权声明:转载时请以超链接形式标明文章原始出处和作者信息及 本声明
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 包,然后安装到你的计算机上。
3 2 环境变量的设置
   假设你将 ACE 安装到了“ D:\ACE\ACE_wrappers ”,那么按照如下步骤进行环境变量的设置:
(1)     鼠标右击“我的电脑”选择“属性 - à 高级 - à 环境变量”,出现以下界面:
图1 ACE环境变量的设置
(2)     新建变量为“ ACE_ROOT , 值为“ D:\ACE\ACE_wrappers ”的环境变量。然后退出,重新启动你的电脑,设置完后 必须重启电脑 ,才能生效!!!!!!!!!!!!!!!!!
3 3 编译 ACE
上面两步做完了之后,我们需要自己编译得到 DLL 和相应的 LIB ,我们需要进行两次编译。一次以 DEBUG 方法编译,生成的 DLL LIB 名称为: ACEd.dll ACEd.lib 。另一次以 RELESE 方式编译,生成的 DLL LIB 名称为: ACE.dll ACE.lib
编译完成之后,生成的动态库都在“ $ACE_ROOT\lib ( 即: D:\ACE\ACE_wrappers\lib) 目录下。
4 VS2003 中设置环境
1 )打开 VS2003 ,选择“工具 à 选项 - à VC++ 目录”,如图二:
2 VS2003 ACE 包含目录 /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.dll ACEd.lib 拷贝一份到现在的工程目录的 DEBUG 文件夹下,如下图 11
11 DLL LIB 拷贝到 DEBUG 文件夹
8 再重新编译一下吧:
12 HELLO WORLD
多了很多信息,这些是调试信息,可以用开关关闭的。
6 ACE_DLL 动态库操作类
ACE 提供了很多很多工具给我们使用,最大优点就是跨平台并且源代码公开的。 ACE_DLL 类主要用于对 DLL 的操作。
6 1 成员列表
下面这个表格列举了所有ACE——DLL的成员,包括从基类继承的成员。

[explicit]
[explicit]
[private]
[private]
[private]
[private]
[private]
[private]
[private]

表一 ACE 的所有成员列表
6 2 几个关键的方法介绍:
参数说明:
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里的函数,来测试的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值