Visual C++下ACE动态服务配置入门

在Windows下使用Visual Studio 10编译ACE ACE自适配通信环境(ADAPTIVE Communication Environment)是可自由使用、开放源码的面向对象(OO)框架(framework),它实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可重用C++包装外观(wrapper facade)和框架组件,可跨多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享 阅读详情

Visual C++下ACE动态服务配置入门
摘要:
   服务动态配置在编写服务端应用在有很明显的优点,本文简要介绍用visual C++ (7.1)
编写ACE动态服务的步骤。
   本文适用于ACE初学者。
  
1. 主进程

1.1 创建主程序
    用Viusal Studio创建一空Win32 Console项目,这里命名为GLIVR86ServiceD.注,这里
D表示Daemon,不是Debug。表示我们以后会把这个项目改造为了NT_Service(以后介绍步骤.
1.2 修改项目属性 (Configuation Properties)
1.2.1 为项目新增主文件 GLIVR86ServiceD.cpp,目的是为项目属性中,增加C/C++选项
1.2.1 General 修改程序输出路径$(OutDir)
1.2.2.Debugging  Command Arguments: -d, 以调试模式启动
1.2.3 C/C++设置
1.2.3.1 Additional Include Directories /I[path]: $(ACE_ROOT);
1.2.3.2 Code Generation: /MTd ;/MT 调试版选MTd,发行版选 MT
1.2.3.3 Preprocessor:Preprocesor Definitions/D: WIN32;_DEBUG;_CONSOLE;
               这是调试版,发行版将_DEBUG改为NDEBUG
1.2.4 链接设置
1.2.4.1 Input: Additinal Dependencise: ACE(d).lib,调试版选aced.lib,
                                                   发行版选ace.lib
1.2.4.2 System: SubSystem /subsystem: Console ;   (/SUBSYSTEM:CONSOLE)

主程序代码


 

// @file:  GLIVR86ServiceD.cpp 
// @description:  IVR 86业务服务主程序入口
// @author: jiangtao
// @version:2.0.0

#include 
" stdafx.h "
#include 
< memory >    //  使用 auto_ptr

#include 
" ACE/OS_NS_unistd.h "
#include 
" ACE/TP_Reactor.h "
#include 
" ACE/Reactor.h "
#include 
" ACE/Service_Config.h "
#include 
" ACE/Thread_Manager.h "

// 线程池
static  ACE_THR_FUNC_RETURN event_loop ( void   * arg) 
{
    ACE_DEBUG((LM_INFO,
" (%P|%t),event_loop()/n " ));
    ACE_Reactor 
* reactor  =  static_cast < ACE_Reactor  *>  (arg);

    reactor
-> owner (ACE_OS::thr_self ());
    reactor
-> run_reactor_event_loop ();
    
return   0 ;
}


int
ACE_TMAIN (
int  argc, ACE_TCHAR  * argv[])
{
  
    
const  size_t N_THREADS  =   4 ;
    ACE_TP_Reactor tp_reactor;
    ACE_Reactor reactor (
& tp_reactor);
    auto_ptr
< ACE_Reactor >  delete_instance(ACE_Reactor::instance ( & reactor));
   
     
if  (ACE_Service_Config::open (argc, argv)  ==   - 1 )
            ACE_ERROR_RETURN ((LM_ERROR,
            ACE_TEXT (
" %p/n " ),
            ACE_TEXT (
" open " )),
            
1 );
       
    ACE_Thread_Manager::instance ()
-> spawn_n
                 (N_THREADS, event_loop, ACE_Reactor::instance ());

    ACE_Thread_Manager::instance ()
-> wait ();

    
return   0 ;
}


2. 创建被加载的服务的动态链接库
2.1 用Visual Studio创建一个新的项目GLIVR86Service,我们依然从空白的Win32 Console开
始
1.2.1 为项目新增主文件 GLIVR86Service.cpp,目的是为项目属性中,增加C/C++选项
1.2.1 General : Configration Type:改为 动态链接库 Dynamic Library(DLL)
1.2.3.1 Additional Include Directories /I[path]: $(ACE_ROOT);
1.2.3.2 Code Generation: /MTd ;/MT 调试版选MTd,发行版选 MT
1.2.3.3 Preprocessor:Preprocesor Definitions/D:
                        WIN32;_DEBUG;_WINDOWS;ACE_BUILD_SVC_DLL
                        这是调试版,发行版将_DEBUG改为NDEBUG
        这里,特别注意,要增加 ACE_BUILD_SVC_DLL宏。如果用generate_export_file.pl
        生成自定义的export头文件,这个宏也可以自定义
       
2.2.2 链接器设置
2.2.2.1 Input: Additinal Dependencise: ACE(d).lib,调试版选aced.lib,
                                                   发行版选ace.lib
2.2.2.2 System: SubSystem /subsystem: Console ;   (/SUBSYSTEM:CONSOLE)
2.2.2.3 General ,Output file:
                 ../GLIVR86ServiceD/GLIVR86ServiceD/GLIVR86ServiceD.dll
   
                    这里填写上GLIVR86ServiceD的路径或环境变量Path中指
                    示的路径,这样可以方便调试

2.2.2.4 Adanced, Import Libaray:  $(OutDir)/GLIVR86ServiceD.lib
                               上面是调试版,发行版可以去掉后缀D,即
                               $(OutDir)/GLIVR86Service.lib
                              
3.服务的动态链接库实现

3.1 为项目增加两个文件,分别声明和实现服务类工厂
//@file: ServiceFactory.h
//@file: ServiceFactory.cpp
代码分别如下

 

// @file: ServiceFactory.h
// @description:  IVR 86业务服务
// @author: jiangtao
// @data: 2006-7-3
// @version:1.0.0


#ifndef SERVICEFACTORY_H
#define  SERVICEFACTORY_H
#include 
" ACE/svc_export.h "
#include 
" ACE/Service_Config.h "
#include 
" ACE/Service_Object.h "

// 声明服务工厂
ACE_SVC_FACTORY_DECLARE (ServiceFactory_T)

class  ACE_Svc_Export ServiceFactory_T :  public  ACE_Service_Object
{
public :
  
///  Initializes object when dynamic linking occurs.
   virtual   int  init ( int  argc, ACE_TCHAR  * argv[]);

  
///  Terminates object when dynamic unlinking occurs.
   virtual   int  fini ( void );

  
///  Returns information on a service object.
   virtual   int  info (ACE_TCHAR  ** info_string, size_t length  =   0 )  const ;

};


#endif  /* SERVICEFACTORY_H */




/*******************************************************************/

// @file: ServiceFactory.cpp

#include 
" ServiceFactory.h "
#include 
" ACE/Log_Msg.h "
// 实现服务工厂
ACE_SVC_FACTORY_DEFINE (ServiceFactory_T)

int  ServiceFactory_T::init( int  argc, ACE_TCHAR  * argv[])
{
    ACE_DEBUG((LM_INFO,
" (%P|%t) 服务初始化完成/n " ));
    
return   0 ;
}

int  ServiceFactory_T::info(ACE_TCHAR  ** strp, size_t length)  const
{
    ACE_DEBUG((LM_INFO,
" ServiceFactory_T::info() /n " ));
    
return   0 ;
}

int  ServiceFactory_T::fini( void )
{
    
return   0 ;
}


5.服务配置文件svc.conf
dynamic IVR86Service Service_Object * GLIVR86Service: _make_ServiceFactory_T() active
   
6. 运行结果

使用ACE_DLL加载动态库小练习 首先创建一个DLL,命名为MyACEDLL,编译并生成MyACEDLL.dll。 创建一个记载DLL的工程,命名为Test_ACE_Load。 配置工程:1.Test_ACE_Load--->属性--->配置属性--->链接器--->常规--->附加库目录--->D:/SDK_ROOT/ACE_wrappers/lib(这个根据你自己的ACE目录修改) 2.Test_A 阅读详情

相关推荐

TAO使用指南(一) ——Win32+VC6.0下ACE和TAO的编译

将网上下载的TAO软件包解压缩到某个目录,在该目录下会有ACE_wrappers目录。(这里使用的版本是ACE-5.5+TAO-1.5+CIAO-0.5 + VC6,虽然CIAO暂时还用不上) 请按照以下步骤来执行:一、新建两个环境变量:ACE_ROOT=ACE_wrappers所在目录;TAO_ROOT=ACE_wrappers/tao二、添加包含头文件声明:在ACE_ROOT/ace目录下建立

候鸟的成长日记 3361

开源C/C++网络库比较:ACE、livevent和Boost

ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候, 要根据情况,看你从那一层来进行使用。支持跨平台。 Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。 libevent是一个C语言写的网络库, 官方主要支持的是类linux 操作系统, 最新的版本添加了对window

debugconsole的专栏 3162

ACE C++ 源码

ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。   ACE的目标用户是高性能和实时通信服务和应用的开发者。它简化了使用进程间通信、事件多路分离、显式动态链接和并发的OO网络应用和服务的开发。此外,通过服务在运行时与应用的动态链接,ACE还使系统的配置和重配置得以自动化。   采用ACE实现了一个通用的C/S架构通信C++程序

C++开发框架 -ACE(线程)

【代码】C++开发框架 -ACE(线程)

qq_41668395的博客 244

C++ ACE开发中的的内存管理

ACE_Allocator,ACE中的分配器类的接口类;ACE_Static_Allocator,管理固定大小的内存;ACE_Cached_Allocator,预先分配内存池,其中含有特定数目和大小的内存chunk;ACE_New_Allocator,为C++ new和delete操作符提供包装的分配器,内部使用new和delete操作符

电蚊拍为什么能秒杀蚊子?深入解析两种四倍压整流电路设计差异

本文深入解析电蚊拍秒杀蚊子的核心原理——四倍压整流电路设计,对比对称式与级联式两种方案的性能差异。通过详细电路分析、实测数据对比和选型建议,揭示高压电路设计的关键技术要点,为电子爱好者和工程师提供实用参考。

rust6ferris的博客 749

ACE的线程管理机制

一、线程的创建与管理 不同的操作系统下用c++进行过多线程编程时,不同操作系统API提供了相同或是相似的功能,但是它们的API的差别却极为悬殊。ACE_Thread提供了对不同OS的线程调用的简单包装,通过一个通用的接口进行处理线程创建、挂起、取消和删除等问题,为跨平台开发提供了支持。 1.1、线程入口函数 所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型: v

IT- 研究者 779

RAID 0/1/5/10 性能实测:4块 SATA SSD 组阵列,顺序读写速度对比

本文通过实测对比了RAID 0/1/5/10在4块SATA SSD上的顺序读写性能,详细展示了不同RAID级别的配置方法、理论性能与实际测试数据。测试结果显示,RAID 0在顺序读写速度上表现最佳,而RAID 10则在性能与数据安全之间取得了平衡,适合数据库服务器等关键应用场景。

weixin_33462167的博客 424

VC6下配置ACE的详细过程

http://blog.youkuaiyun.com/liumyong/archive/2004/12/23/227140.aspx 自己作一个config.h 里面要有#include "ace/config-win32.h"如果是win98/me的话再加上#define ACE_HAS_WINNT4 0然后打开ace.dsw,进行批生成(可以选择生成的库,比如(static)debug/rel

legion8169的专栏 1285

高级Salesforce开发面试题

自定义设置允许您创建自定义数据集,以及为组织、配置文件或特定用户创建和关联自定义数据。自定义元数据类似于自定义设置,但是自定义元数据类型中的记录被视为元数据而不是数据。自定义设置有列表和层次自定义设置两种。自定义元数据中没有此类类型。此外,自定义元数据不支持基于用户配置文件或特定用户的层次结构类型的数据。自定义设置现在不再支持关系字段。但您可以在自定义元数据对象之间创建查找。元数据查询不占用查询sql次数的限制。

weixin_45663522的博客 1241

诊断CAPL自动化(3)——封装了接收诊断数据的通用CAPL脚本函数库

DiagGetRespPrimitiveSize (获取诊断响应的单个数据) diagGetPrimitiveData (获取诊断返回的所有数据) DiagGetRespParameter(数值类型) DiagGetRespParameter(字符串类型) DiagGetRespParameter(byte数组)

蚂蚁小兵 6218

Building and Installing ACE on Windows with Microsoft Visual C++

Building and Installing ACE on Windows with Microsoft Visual C++ Uncompress the ACE distribution into a directory, where it will create a ACE_wrappers directory containing the distribution. The ACE

autumn20080101的专栏 1197

UNet + Shuffle Attention:一种轻量高效的医学图像分割注意力机制

本文提出了一种轻量高效的医学图像分割方法,将Shuffle Attention模块嵌入UNet的上采样路径中。Shuffle Attention通过通道分组注意力机制增强关键特征,同时保持计算轻量化。该方法在上采样后应用注意力模块,有效融合高层语义与低层细节,计算开销小且易于部署。实验表明,该模型在保持UNet原有优势的基础上,通过注意力机制提升了特征聚焦能力,适用于多种图像分割任务。未来可进一步结合空间注意力或Transformer模块以增强模型性能。

Henry的博客 240

windows ACE的安装

ACE的安装是一件比较麻烦的事情,这里简单的记录了我在VS2005下安装ACE的过程,希望能给大家一个参考。 安装环境: 操作系统:Windows XP 专业版 编译环境:VS2005中文版 ACE版本:ACE-5.5.1 安装过程: 下载安装包。 Ace的安装文件可以在http://download.dre.vanderbilt.edu

坚持是世界上每个有所建树的人共有的品质! 821

TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate

这篇被 ICLR 2026 接收的论文提出了一种名为TurboQuant的全新在线向量量化(Vector Quantization, VQ)算法。该研究的核心目标是解决大语言模型(LLM)在长上下文推理时面临的 KV Cache 显存消耗瓶颈,以及大规模向量数据库在近似最近邻检索中的存储与延迟问题。有别于现有技术,TurboQuant 是一种无需任何校准数据、无需训练的在线算法(Data-oblivious)。

c_cpp_csharp的专栏 118

深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正

大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。

微学AI的博客 3157

ACE的编译和安装

1.       将下载的ACE解压到本地目录。例:D:/ACE_wrappers。一下以都以该目录为例子说明。2.       在D:/ACE_wrappers/ace目录下创建文件config.h文件内容如下:///////////////////////////////////////////////////////////////////////////*如果你希望使用

new_stranger的专栏 1324

K-Core, K-Shell & K-Crust傻傻分不清楚

K-Core(K-核)就是所有大于等于K的K-Shell的并集;K-Crust(K-皮)就是所有小于等于K的K-shell的并集。

欢迎订阅 -- 小源笔迹 2255

ACE搭建和配置

以前在VC6.0搭建和配置过ACE5.5,今天决定在VC10下搭建和配置ACE6.1.0。 以下是网上百度的文章,现转载过来,以备后用: 一、ACE编译 a)         下载ACE源文件,你可以从官方网站下载,我的是ACE+TAO+CIAO-5.6。 下载地址: http://download.dre.vanderbilt.edu/ 注意我这里下载的是.zip作为扩展名的版本,这

IT_SW_FW的专栏 641

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ACE 5.6版本的编译

最近,写一些网络程序。下了 最新版本的ACE发现。新的版本已经不支持vc6了。只支持vc7.1和vc8。看样子现在都在全面过渡vc2005这个编译器。5.6的ACE编译非常的简单,从网站下载压缩包,然后解压到目录在目录下的ACE目录下建立一个config.h文件,然后里面包含:#include "ace/config-win32.h"然后编译下debug和release。现在,备份下ac...

测试 748

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

win7+visual+studio+2010下安装和配置ace和boost

1.  Ace 1.1.  Win7+Visual Studio2010编译 Uncompress     the ACE distribution into a directory, where it will create a ACE_wrappers     dir

lshni的专栏 4133

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ACE在win32平台上的安装,与VC6的集成

 (ACE版本:ACE5.5)wind使用Microsoft Visual C++ 在win32平台上生成和安装ACE:注意:关于MSVC5.0和Service Pack 3的使用有一些问题,过去一些用户在sp2中使用良好的代码在sp3种却会引发一些问题。感谢Bill 的细心查找,这一神秘的问题被解决了。答案?(哦,这儿有一个好答案。。。)这可能是因为有多个版本的sp3较早版本的sp3有一

freedom0203的专栏 688

TAO和ACE在Windows平台下的编译与安装

最近要用TAO和ACE来开发中间件,网上找了好多配置环境的例程,发现不是十分的理想,现在结合自己的配置已经安装步骤,做个简要的安装说明。0. 准备工作0.1 下载源码包源码可以上官网下载,下载链接http://download.dre.vanderbilt.edu/打开链接,如下图: Linux/Unix用户下载tar.gz或者tar.bz2格式;Windows用户下载zip格式。0.2 开发

Time is a choice 1532

WIN7 + VS2008 ACE配置

<br />操作系统:WIN7 编译环境:vs2008简体中文版 ACE版本:ACE-6.0.1 安装过程: 下载完ACE后将其解压,我的解压路径为E:/devLib/ACE-6.0.1/ACE_wrappers。 1 设置操作系统的环境变量 选择“控制面板/系统和安全/系统”中的“高级系统设置/环境变量”在其中添加一个名为ACE_ROOT的系统环境变量,值为刚才ACE解压的路径“E:/devLib/ACE-6.0.1/ACE_wrappers”。 在“用户环境变量”中添加变量名:Path,变量值:%ACE

老衣的专栏 1173

ACE的安装,输出hello ace

0.解压到C盘根目录后,为C:/ACE_WRAPPERS/1. C:/ACE_WRAPPERS/ace/下新建config.h config.h中的内容是:  #define ACE_HAS_STANDARD_CPP_LIBRARY 1   //为了使用c++的标准库#define ACE_HAS_MFC 1                                       

truement的专栏 773
上一篇: 生成ACE: Win32下生成支持MFC的动态链接库
下一篇: Advanced CORBA(R) Programming with C++
Stone
博客等级 码龄21年 1715粉丝 158原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值