TAO使用指南[zt from smth ](by huihoo.org) 标 题: TAO使用指南 发信站: BBS 水木清华站 (Thu May 8 18:35:49 2003), 站内 最近正在将一个工程由Orbix2000向TAO移植. 将一些心得和经验奉上, 算是给DOC版做点贡献... 说的不对, 请大家指正. 同时您有什么心得 也不仿写出来嘛 :) 1. 什么是TAO? TAO是美国华盛顿大学的CORBA界大牛Douglas C. Schmidt博士领导 开发的一个实时CORBA平台. 它是一个开放源码项目, 所以是完全免费的. 用C++语言开发. 符合CORBA2.6版本. 支持语言: C++ 支持平台: Win32, 常见的各种Unix, Linux, 实时操作系统如VxWorks 等等. 在所有的CORBA平台中, TAO支持的平台应该是最多的. 支持的服务: Naming, Event, Notification, Security, Time, Scheduling, Logging, Lifecycle, Trading, Concurrency, Lifecycle, A/V Streaming, Load balancing等. 2. 网上的TAO资源 TAO主页: http://www.cs.wustl.edu/~schmidt/TAO.html OCI公司宣布对TAO进行技术支持: http://www.ociweb.com 它出了一本书叫: TAO Developer's Guide, 上下两卷, 1000页 左右, 要250美刀. 吐血买了一本... 此外, OCI有自己的TAO发布版本, 最新版本号为1.2a. Win32版本 开价50美刀. OCI有一个TAO的FAQ, 很不错, 地址: http://www.ociweb.com/faq/index.html TAO的Mailing List: [email protected] Mailing List Archive: http://groups.yahoo.com/group/tao-users 3. 下载TAO 地址: http://deuce.doc.wustl.edu/Download.html 目前最新的Release版本是1.3 发信人: Mentoya (钻研Orbix2000中...), 信区: DOC 标 题: TAO使用指南 -- 编译ACE和TAO 发信站: BBS 水木清华站 (Thu May 8 19:11:37 2003), 转信 我只用到Win32平台. 现在使用的环境是: WinXP Professional + MSVC SP5. 在Win32平台下, 还可以使用C++ Builder来编译和开发TAO. 我没有用过.:-( 参见: http://www.cs.wustl.edu/~schmidt/ACE_wrappers/TAO/TAO-INSTALL.html ------------------------------------------------------------------------ TAO完全支持Win32API,(包括Windows NT, Windows 2000, Windows 95/98/ME) VC5.0和VC6.0均可编译。如果要在Borland C++ Builder中编译,请参见有关文档. TAO可以被编译成两种版本:DLL版(动态链接)和LIB版(静态链接) 一. Win32+VC6.0下编译和安装ACE和TAO 将网上下载的TAO软件包解压缩到某个目录,在该目录下会有ACE_wrappers目录。 请按照以下步骤来执行: 1. 新建两个环境变量: ACE_ROOT=ACE_wrappers所在目录; TAO_ROOT=ACE_wrappers\tao 2. 在ACE_ROOT\ace目录下建立一个空文件config.h,里面包含一句: #include "ace/config-win32.h" 以说明是要在win32平台下进行编译。 注: (1) #include "config-win32.h"亦可 (2) 最好在#include之前加上 #define ACE_HAS_STANDARD_CPP_LIBRARY 1 以使用MSVC的STL库. 3. 如果是98/ME,则在ACE_ROOT\ace\config.h的最前面加上 #define ACE_HAS_WINNT4 0 来关掉一些NT/2000中特有的代码。 4. 如果你想用MSVC的STL库 (如iostream, cstdio等), 则在config.h文件 中的#include语句前添加下面的行: #define ACE_HAS_STANDARD_CPP_LIBRARY 1 注: 推荐使用该编译开关. 否则对新手而言, 在自己的工程中使用MSVC的STL 库时会有一些小麻烦. 5. 如果在ACE中要使用MFC的库,则需要在config.h中添加: #define ACE_HAS_MFC 1 在默认情况下,所有的ACE工程使用的是MSVC的DLL文件作为运行时库。 你可以选择使用ACE的静态库文件(LIB)而不需考虑这些运行时库。 选择动态链接的原因是所有的NT都会包含这些dll文件(节省空间). 如果你想使用MFC的静态库版本,则需要在config.h中加入以下的宏定义: #define ACE_USES_STATIC_MFC 1 你也可以全部使用静态库,这需要你在ACE的工程文件中自己设置。 6. 如果定义了ACE_AS_STATIC_LIBS 宏,则ACE 库将被编译成为静态库。 如果你的程序要静态链接ACE的静态库,则在你的工程中也要定义这个宏: ACE_AS_STATIC_LIBS. 作为可选项,为了减小静态库文件和你的可执行程序的大小,你可以在 ACE_ROOT\ace\config.h文件的#include语句前添加如下的宏定义 #define ACE_NO_INLINE 来禁止内联函数。 7. 用VC打开TAO和ACE的工程文件:ACE_ROOT\tao\taoace.dsw,开始编译ACE 和TAO. 注意ACE和TAO有Debug和Release两个版本. 你在开发自己的程序时, 如果是Debug版的程序, 必须链接Debug版的TAO库, 如果是Release版的程序, 必须链接Release版的TAO库.(这不废话! 不过你一定会回来和我一起唱这个 当当当的) taoace.dsw中包含了许多工程, 工程之间是有依赖关系的. 所以这个工程 编译的顺序比较重要. 关于编译的顺序, 下文叙述. 每个工程都包含有一些不同的配置:Debug/Release、MFC/Non-MFC、 Static/Dynamic等版本。你必须确定你所需要的版本。如,要生成你程序的 debug版,则需要debug版的ACE。 注意:如果你用动态(DLL)版本的TAO,在开发程序时,需要将ACE_ROOT\bin 目录添加到你的程序的PATH环境变量中,否则程序会报告找不到动态链接库. 8. 编译顺序. TAO中有好多服务可能是你用不到的. 所以编译时没有必要将所有的程序全部 编译一遍. 要知道编译TAO还是个艰巨的任务咧. 我目前只用到了Naming和Event服务, 并且没有用它的实时CORBA功能. 所以我 的编译顺序是: 说明 需要编译的工程 --------------------------------------- 核心库 ACE DLL Files TAO DLL Files IDL编译器 gperf Files TAO_IDL_FE_DLL Files TAO_IDL_BE_DLL Files TAO_IDL Compiler Files POA PortableServer Files 名字和事件服务 IORTable Files Svc Utils Files CosNaming Files Naming_Service Files Messaging Files CosEvent Files CosEvent_Service Files NT_Naming_Service Files ---------------------------------------- TAO的主页上有一个可以自动编译所有TAO工程的脚本, 记不得在那里了. 9. 编译后得到的文件分散于各目录中: 可执行程序和动态链接库文件: $ACE_ROOT\bin lib文件: $(ACE_ROOT)\ace, $(TAO_ROOT)\tao, $(TAO_ROOT)\orbsvcs\orbsvcs 头文件: $(ACE_ROOT), $(TAO_ROOT), $(TAO_ROOT)\orbsvcs 10. ACE的DLL和LIB的命名规则: 当使用MSVC编译时的命名规则如下: "静态库/DLL文件名" + (是静态库吗? "s" : "") + (是Debug模式的库吗? "d" : "") + (.dll/.lib) 11. 测试TAO TAO的测试代码位于TAO_ROOT\tests目录下。有一个vc的工程文件: TAO_tests.dsw来编译所有的测试代码。 发信人: Mentoya (钻研Orbix2000中...), 信区: DOC 标 题: TAO使用指南 -- 用VC++开发TAO程序 发信站: BBS 水木清华站 (Thu May 8 19:34:42 2003), 转信 在Microsoft Visual C++中开发TAO程序时的设置: 一. 路径设置 1. 首先确认环境变量ACE_ROOT和TAO_ROOT已被正确设置. 2. 将(ACE_ROOT\bin)添加到PATH环境变量中. 否则会找不到DLL. 3. 在Tools->Options->Directories中, 分别添加如下目录: Include files: $(ACE_ROOT),$(TAO_ROOT),$(TAO_ROOT)\orbsvcs Library files: $(ACE_ROOT)\ace,$(TAO_ROOT)\tao,$(TAO_ROOT)\orbsvcs\orbsvcs 4. 也可以在 Project->Settings->C/C++->Preprocessor->Additional include directories 中添加头文件的路径. 在 Project->Settings->Link->Input->Additional library directories 中添加静态库文件路径. 二. 工程设置 1. Project->Settings->C/C++->Code generation: 如果工程是Debug版, 选择Debug Multithreaded DLL 如果工程是Release版, 选择Multithreaded DLL 2. Project->Settings->Link->Input->Object/library modules: 需要添加TAO的静态链接库文件: 说明 Debug版 Release版 --------------------------------------------- 普通客户端: Debug版: ACEd.lib Release版: ACE.lib 普通服务器: 在ACE.lib/ACEd.lib的基础上, 还需要添加: Debug版: PortableServerd.lib Release版: PortableServer.lib 如果使用了名字服务, 则需要添加 TAO_CosNaming.lib 或 TAO_CosNamingd.lib 如果使用了事件服务, 则需要添加 TAO_CosEvent.lib 或 TAO_CosEventd.lib 注意: TAO分Debug和Release版, 所以在开发时, Debug和Release版 的设置要严格区分. 即使是MS自己的库也是这样. 如对于 Debug版, 要包含MSVCRTd.lib而不是MSVCRT.lib. 我就是因为 这个原因而使程序出现异常, 导致差点放弃了TAO :-( 发信人: Mentoya (钻研Orbix2000中...), 信区: DOC 标 题: TAO使用指南 -- 做一个TAO的SDK 发信站: BBS 水木清华站 (Thu May 8 19:56:03 2003), 站内 TAO的文件众多, 目录结构复杂, 所以生成一个所谓的TAO SDK来方便开发. 这个TAO SDK的目录结构如下: TAOSDK_ROOT | |-- bin (所有的可执行文件和动态链接库) |-- idl (ORB的IDL文件) |-- include (所有的头文件) | |-- ace | | |-- *** | | |-- *** | | | |-- orbsvcs | | |-- CosEvent | | |-- Naming | | |-- *** | | |-- *** | | | |-- tao | | |-- IORTable | | |-- PortableServer | | |-- *** |-- lib (所有的静态库文件) 使用时, 首先创建环境变量 TAOSDK_ROOT 为TAO SDK的根目录, 然后 在VC的工程中如下设置: 添加头文件的include路径: $(TAOSDK_ROOT)\include,$(TAOSDK_ROOT)\include\orbsvcs,$(TAOSDK_ROOT)\tao 添加静态库文件路径: $(TAOSDK_ROOT)\lib 下面提供了一个自动生成TAO SDK的批处理文件, 将该文件置于ACE_ROOT目录下, 然后执行之... 注: 本程序来源于TAO的邮件列表. File name: TAOSDK.bat ------------------------------------------------------------------------- @echo off @echo Createing directories… mkdir ..\tao\bin mkdir ..\tao\include mkdir ..\tao\include\ace mkdir ..\tao\include\ace\classix mkdir ..\tao\include\ace\qos mkdir ..\tao\include\ace\rmcast mkdir ..\tao\include\ace\ssl mkdir ..\tao\include\tao mkdir ..\tao\include\tao\BiDir_GIOP mkdir ..\tao\include\tao\Domain mkdir ..\tao\include\tao\DynamicAny mkdir ..\tao\include\tao\DynamicInterface mkdir ..\tao\include\tao\IFR_Client mkdir ..\tao\include\tao\IORManipulation mkdir ..\tao\include\tao\IORTable mkdir ..\tao\include\tao\PortableServer mkdir ..\tao\include\tao\RTCORBA mkdir ..\tao\include\tao\RTPortableServer mkdir ..\tao\include\tao\SmartProxies mkdir ..\tao\include\tao\Strategies mkdir ..\tao\include\tao\TypeCodeFactory mkdir ..\tao\include\orbsvcs mkdir ..\tao\include\orbsvcs\AV mkdir ..\tao\include\orbsvcs\Concurrency mkdir ..\tao\include\orbsvcs\CosEvent mkdir ..\tao\include\orbsvcs\ESF mkdir ..\tao\include\orbsvcs\ETCL mkdir ..\tao\include\orbsvcs\Event mkdir ..\tao\include\orbsvcs\FaultTolerance mkdir ..\tao\include\orbsvcs\LifeCycle mkdir ..\tao\include\orbsvcs\LoadBalancing mkdir ..\tao\include\orbsvcs\Log mkdir ..\tao\include\orbsvcs\Naming mkdir ..\tao\include\orbsvcs\Notify mkdir ..\tao\include\orbsvcs\Property mkdir ..\tao\include\orbsvcs\Sched mkdir ..\tao\include\orbsvcs\Security mkdir ..\tao\include\orbsvcs\SSLIOP mkdir ..\tao\include\orbsvcs\Time mkdir ..\tao\include\orbsvcs\Trader mkdir ..\tao\lib @echo copying header files... copy ace\*.i ..\tao\include\ace copy ace\*.inl ..\tao\include\ace copy ace\*.h ..\tao\include\ace copy ace\*.cpp ..\tao\include\ace copy ace\classix\*.i ..\tao\include\ace\classix copy ace\classix\*.h ..\tao\include\ace\classix copy ace\classix\*.cpp ..\tao\include\ace\classix copy ace\qos\*.i ..\tao\include\ace\qos copy ace\qos\*.h ..\tao\include\ace\qos copy ace\qos\*.cpp ..\tao\include\ace\qos copy ace\rmcast\*.i ..\tao\include\ace\rmcast copy ace\rmcast\*.h ..\tao\include\ace\rmcast copy ace\rmcast\*.cpp ..\tao\include\ace\rmcast copy ace\ssl\*.i ..\tao\include\ace\ssl copy ace\ssl\*.h ..\tao\include\ace\ssl copy ace\ssl\*.cpp ..\tao\include\ace\ssl copy tao\tao\*.i ..\tao\include\tao copy tao\tao\*.inl ..\tao\include\tao copy tao\tao\*.h ..\tao\include\tao copy tao\tao\*.idl ..\tao\include\tao copy tao\tao\*.cpp ..\tao\include\tao copy tao\orbsvcs\Naming_Service\*.h ..\tao\include\tao copy tao\orbsvcs\LoadBalancer\*.h ..\tao\include\tao copy tao\orbsvcs\Logging_Service\*.h ..\tao\include\tao copy tao\orbsvcs\TAO_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Time_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Naming_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Trading_Service\*.h ..\tao\include\tao copy tao\orbsvcs\ImplRepo_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Concurrency_Service\*.h ..\tao\include\tao copy tao\orbsvcs\CosEvent_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Dump_Schedule\*.h ..\tao\include\tao copy tao\orbsvcs\Event_Service\*.h ..\tao\include\tao copy tao\orbsvcs\IFR_Service\*.h ..\tao\include\tao copy tao\orbsvcs\LifeCycle_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Notify_Service\*.h ..\tao\include\tao copy tao\orbsvcs\Scheduling_Service\*.h ..\tao\include\tao copy tao\orbsvcs\orbsvcs\*.h ..\tao\include\orbsvcs copy tao\orbsvcs\orbsvcs\*.i ..\tao\include\orbsvcs copy tao\orbsvcs\orbsvcs\*.cpp ..\tao\include\orbsvcs copy tao\orbsvcs\orbsvcs\AV\*.h ..\tao\include\orbsvcs\AV copy tao\orbsvcs\orbsvcs\AV\*.i ..\tao\include\orbsvcs\AV copy tao\orbsvcs\orbsvcs\AV\*.cpp ..\tao\include\orbsvcs\AV copy tao\orbsvcs\orbsvcs\Concurrency\*.h ..\tao\include\orbsvcs\Concurrency copy tao\orbsvcs\orbsvcs\Concurrency\*.i ..\tao\include\orbsvcs\Concurrency copy tao\orbsvcs\orbsvcs\Concurrency\*.cpp ..\tao\include\orbsvcs\Concurrency copy tao\orbsvcs\orbsvcs\CosEvent\*.h ..\tao\include\orbsvcs\CosEvent copy tao\orbsvcs\orbsvcs\CosEvent\*.i ..\tao\include\orbsvcs\CosEvent copy tao\orbsvcs\orbsvcs\CosEvent\*.cpp ..\tao\include\orbsvcs\CosEvent copy tao\orbsvcs\orbsvcs\ESF\*.h ..\tao\include\orbsvcs\ESF copy tao\orbsvcs\orbsvcs\ESF\*.i ..\tao\include\orbsvcs\ESF copy tao\orbsvcs\orbsvcs\ESF\*.cpp ..\tao\include\orbsvcs\ESF copy tao\orbsvcs\orbsvcs\ETCL\*.h ..\tao\include\orbsvcs\ETCL copy tao\orbsvcs\orbsvcs\ETCL\*.i ..\tao\include\orbsvcs\ETCL copy tao\orbsvcs\orbsvcs\ETCL\*.cpp ..\tao\include\orbsvcs\ETCL copy tao\orbsvcs\orbsvcs\Event\*.h ..\tao\include\orbsvcs\Event copy tao\orbsvcs\orbsvcs\Event\*.i ..\tao\include\orbsvcs\Event copy tao\orbsvcs\orbsvcs\Event\*.cpp ..\tao\include\orbsvcs\Event copy tao\orbsvcs\orbsvcs\FaultTolerance\*.h ..\tao\include\orbsvcs\FaultTolerance copy tao\orbsvcs\orbsvcs\FaultTolerance\*.i ..\tao\include\orbsvcs\FaultTolerance copy tao\orbsvcs\orbsvcs\FaultTolerance\*.cpp ..\tao\include\orbsvcs\FaultTolerance copy tao\orbsvcs\orbsvcs\LifeCycle\*.h ..\tao\include\orbsvcs\LifeCycle copy tao\orbsvcs\orbsvcs\LifeCycle\*.i ..\tao\include\orbsvcs\LifeCycle copy tao\orbsvcs\orbsvcs\LifeCycle\*.cpp ..\tao\include\orbsvcs\LifeCycle copy tao\orbsvcs\orbsvcs\LoadBalancing\*.h ..\tao\include\orbsvcs\LoadBalancing copy tao\orbsvcs\orbsvcs\LoadBalancing\*.i ..\tao\include\orbsvcs\LoadBalancing copy tao\orbsvcs\orbsvcs\LoadBalancing\*.cpp ..\tao\include\orbsvcs\LoadBalancing copy tao\orbsvcs\orbsvcs\Log\*.h ..\tao\include\orbsvcs\Log copy tao\orbsvcs\orbsvcs\Log\*.i ..\tao\include\orbsvcs\Log copy tao\orbsvcs\orbsvcs\Log\*.cpp ..\tao\include\orbsvcs\Log copy tao\orbsvcs\orbsvcs\Naming\*.h ..\tao\include\orbsvcs\Naming copy tao\orbsvcs\orbsvcs\Naming\*.i ..\tao\include\orbsvcs\Naming copy tao\orbsvcs\orbsvcs\Naming\*.cpp ..\tao\include\orbsvcs\Naming copy tao\orbsvcs\orbsvcs\Notify\*.h ..\tao\include\orbsvcs\Notify copy tao\orbsvcs\orbsvcs\Notify\*.i ..\tao\include\orbsvcs\Notify copy tao\orbsvcs\orbsvcs\Notify\*.cpp ..\tao\include\orbsvcs\Notify copy tao\orbsvcs\orbsvcs\Property\*.h ..\tao\include\orbsvcs\Property copy tao\orbsvcs\orbsvcs\Property\*.i ..\tao\include\orbsvcs\Property copy tao\orbsvcs\orbsvcs\Property\*.cpp ..\tao\include\orbsvcs\Property copy tao\orbsvcs\orbsvcs\Sched\*.h ..\tao\include\orbsvcs\Sched copy tao\orbsvcs\orbsvcs\Sched\*.i ..\tao\include\orbsvcs\Sched copy tao\orbsvcs\orbsvcs\Sched\*.cpp ..\tao\include\orbsvcs\Sched copy tao\orbsvcs\orbsvcs\Security\*.h ..\tao\include\orbsvcs\Security copy tao\orbsvcs\orbsvcs\Security\*.i ..\tao\include\orbsvcs\Security copy tao\orbsvcs\orbsvcs\Security\*.cpp ..\tao\include\orbsvcs\Security copy tao\orbsvcs\orbsvcs\SSLIOP\*.h ..\tao\include\orbsvcs\SSLIOP copy tao\orbsvcs\orbsvcs\SSLIOP\*.i ..\tao\include\orbsvcs\SSLIOP copy tao\orbsvcs\orbsvcs\SSLIOP\*.cpp ..\tao\include\orbsvcs\SSLIOP copy tao\orbsvcs\orbsvcs\Time\*.h ..\tao\include\orbsvcs\Time copy tao\orbsvcs\orbsvcs\Time\*.i ..\tao\include\orbsvcs\Time copy tao\orbsvcs\orbsvcs\Time\*.cpp ..\tao\include\orbsvcs\Time copy tao\orbsvcs\orbsvcs\Trader\*.h ..\tao\include\orbsvcs\Trader copy tao\orbsvcs\orbsvcs\Trader\*.i ..\tao\include\orbsvcs\Trader copy tao\orbsvcs\orbsvcs\Trader\*.cpp ..\tao\include\orbsvcs\Trader copy tao\tao\BiDir_GIOP\*.h ..\tao\include\tao\BiDir_GIOP copy tao\tao\BiDir_GIOP\*.inl ..\tao\include\tao\BiDir_GIOP copy tao\tao\BiDir_GIOP\*.i ..\tao\include\tao\BiDir_GIOP copy tao\tao\Domain\*.h ..\tao\include\tao\Domain copy tao\tao\Domain\*.inl ..\tao\include\tao\Domain copy tao\tao\Domain\*.i ..\tao\include\tao\Domain copy tao\tao\DynamicAny\*.h ..\tao\include\tao\DynamicAny copy tao\tao\DynamicAny\*.inl ..\tao\include\tao\DynamicAny copy tao\tao\DynamicAny\*.i ..\tao\include\tao\DynamicAny copy tao\tao\DynamicInterface\*.h ..\tao\include\tao\DynamicInterface copy tao\tao\DynamicInterface\*.inl ..\tao\include\tao\DynamicInterface copy tao\tao\DynamicInterface\*.i ..\tao\include\tao\DynamicInterface copy tao\tao\IFR_Client\*.h ..\tao\include\tao\IFR_Client copy tao\tao\IFR_Client\*.inl ..\tao\include\tao\IFR_Client copy tao\tao\IFR_Client\*.i ..\tao\include\tao\IFR_Client copy tao\tao\IORManipulation\*.h ..\tao\include\tao\IORManipulation copy tao\tao\IORManipulation\*.inl ..\tao\include\tao\IORManipulation copy tao\tao\IORManipulation\*.i ..\tao\include\tao\IORManipulation copy tao\tao\IORTable\*.h ..\tao\include\tao\IORTable copy tao\tao\IORTable\*.inl ..\tao\include\tao\IORTable copy tao\tao\IORTable\*.i ..\tao\include\tao\IORTable copy tao\tao\PortableServer\*.h ..\tao\include\tao\PortableServer copy tao\tao\PortableServer\*.inl ..\tao\include\tao\PortableServer copy tao\tao\PortableServer\*.i ..\tao\include\tao\PortableServer copy tao\tao\RTCORBA\*.h ..\tao\include\tao\RTCorba copy tao\tao\RTCORBA\*.inl ..\tao\include\tao\RTCorba copy tao\tao\RTCORBA\*.i ..\tao\include\tao\RTCorba copy tao\tao\RTPortableServer\*.h ..\tao\include\tao\RTPortableServer copy tao\tao\RTPortableServer\*.inl ..\tao\include\tao\RTPortableServer copy tao\tao\RTPortableServer\*.i ..\tao\include\tao\RTPortableServer copy tao\tao\SmartProxies\*.h ..\tao\include\tao\SmartProxies copy tao\tao\SmartProxies\*.inl ..\tao\include\tao\SmartProxies copy tao\tao\SmartProxies\*.i ..\tao\include\tao\SmartProxies copy tao\tao\Strategies\*.h ..\tao\include\tao\Strategies copy tao\tao\Strategies\*.inl ..\tao\include\tao\Strategies copy tao\tao\Strategies\*.i ..\tao\include\tao\Strategies copy tao\tao\TypeCodeFactory\*.h ..\tao\include\tao\TypeCodeFactory copy tao\tao\TypeCodeFactory\*.inl ..\tao\include\tao\TypeCodeFactory copy tao\tao\TypeCodeFactory\*.i ..\tao\include\tao\TypeCodeFactory @echo copying libraries... copy ace\*.lib ..\tao\lib copy ace\SSL\*.lib ..\tao\lib copy tao\tao\*.lib ..\tao\lib copy tao\tao\BiDir_GIOP\*.lib ..\tao\lib copy tao\tao\Domain\*.lib ..\tao\lib copy tao\tao\DynamicAny\*.lib ..\tao\lib copy tao\tao\DynamicInterface\*.lib ..\tao\lib copy tao\tao\IFR_Client\*.lib ..\tao\lib copy tao\tao\IORManipulation\*.lib ..\tao\lib copy tao\tao\IORTable\*.lib ..\tao\lib copy tao\tao\PortableServer\*.lib ..\tao\lib copy tao\tao\RTCORBA\*.lib ..\tao\lib copy tao\tao\RTPortableServer\*.lib ..\tao\lib copy tao\tao\SmartProxies\*.lib ..\tao\lib copy tao\tao\Strategies\*.lib ..\tao\lib copy tao\tao\TypeCodeFactory\*.lib ..\tao\lib copy tao\TAO_IDL\*.lib ..\tao\lib copy tao\orbsvcs\IFR_Service\*.lib ..\tao\lib copy tao\orbsvcs\orbsvcs\*.lib ..\tao\lib @echo copying binary files... copy bin\*.dll ..\tao\bin copy bin\*.exe ..\tao\bin copy tao\orbsvcs\Concurrency_Service\Concurrency_Service.exe ..\tao\bin\Concurrency_Serviced.exe copy tao\orbsvcs\Concurrency_Service\Release\Concurrency_Service.exe ..\tao\bin copy tao\orbsvcs\CosEvent_Service\CosEvent_Service.exe ..\tao\bin\CosEvent_Serviced.exe copy tao\orbsvcs\CosEvent_Service\Release\CosEvent_Service.exe ..\tao\bin copy tao\orbsvcs\Dump_Schedule\Dump_Schedule.exe ..\tao\bin\Dump_Scheduled.exe copy tao\orbsvcs\Dump_Schedule\Release\Dump_Schedule.exe ..\tao\bin copy tao\orbsvcs\Event_Service\Event_Service.exe ..\tao\bin\Event_Serviced.exe copy tao\orbsvcs\Event_Service\Release\Event_Service.exe ..\tao\bin copy tao\orbsvcs\IFR_Service\IFR_Service.exe ..\tao\bin\IFR_Serviced.exe copy tao\orbsvcs\IFR_Service\Release\IFR_Service.exe ..\tao\bin copy tao\orbsvcs\ImplRepo_Service\ImplRepo_Service.exe ..\tao\bin\ImplRepo_Serviced.exe copy tao\orbsvcs\ImplRepo_Service\Release\ImplRepo_Service.exe ..\tao\bin copy tao\orbsvcs\LifeCycle_Service\LifeCycle_Service.exe ..\tao\bin\LifeCycle_Serviced.exe copy tao\orbsvcs\LifeCycle_Service\Release\LifeCycle_Service.exe ..\tao\bin copy tao\orbsvcs\Naming_Service\Naming_Service.exe ..\tao\bin\Naming_Serviced.exe copy tao\orbsvcs\Naming_Service\NT_Naming_Service.exe ..\tao\bin\NT_Naming_Serviced.exe copy tao\orbsvcs\Naming_Service\Release\Naming_Service.exe ..\tao\bin copy tao\orbsvcs\Naming_Service\Release\NT_Naming_Service.exe ..\tao\bin copy tao\orbsvcs\Notify_Service\Notify_Service.exe ..\tao\bin copy tao\orbsvcs\Scheduling_Service\Scheduling_Service.exe ..\tao\bin\Scheduling_Serviced.exe copy tao\orbsvcs\Scheduling_Service\Release\Scheduling_Service.exe ..\tao\bin copy tao\orbsvcs\Trading_Service\Trading_Service.exe ..\tao\bin\Trading_Serviced.exe copy tao\orbsvcs\Trading_Service\Release\Trading_Service.exe ..\tao\bin @Create TAO SDK Finished! ------------------------------------------------------------------------- 发信人: Mentoya (钻研Orbix2000中...), 信区: DOC 标 题: TAO使用指南 -- IDL编译器 发信站: BBS 水木清华站 (Thu May 8 20:56:43 2003), 站内 TAO的IDL编译器名字是: tao_idl.exe. Debug版位于Ace_Wrappers\bin目录下, Release版位于Ace_Wrappers\bin\release目录下,文件名仍为tao_idl.exe。 1. 产生的文件: *.idl文件被编译后产生的文件由文件名和后缀组成. 类型有: 说明 产生的文件格式(默认) 备注 --------------------------------------------------------------- 客户stubs *C.h、*C.cpp、*C.i 服务器 skeletons *S.h、*S.cpp、*S.i 服务器 skeleton (tie) *S_T.h、*S_T.cpp、*S_T.i 可以用-Sc开关来去掉这些文件 实现类文件 *I.h、*I.cpp 默认不生成这些文件,需要用 -GI开关 --------------------------------------------------------------- 注: 产生的文件格式(后缀、扩展名等)可以由命令行开关来控制。 2. TAO_IDL的编译选项: 输入命令 tao_idl -u 就会出现对idl的编译选项的详细说明. TAO IDL编译器的编译选项虽然很多, 但是常用的就那么几个. -Sc: 不生成tie类的实现 -Wb,pch_include=stdafx.h 生成的每个cpp文件都会包含#include "stdafx.h" -GI: 生成空的Implementation类. -Idir: 指定idl编译器的搜索路径 这里要注意, 编译选项是大小写敏感的. 注: 发现在编译idl文件时, IDL文件中的#define, #ifdef, #endif等行必须从 第一列开始, 否则编译器会报错. 发信人: Mentoya (学习TAO中~), 信区: DOC 标 题: TAO使用指南 -- 名字服务 发信站: BBS 水木清华站 (Sat May 10 22:11:17 2003), 转信 名字服务(Naming Service,不过大家叫的更多的是命名服务)是CORBA的 最基本的服务之一。名字服务很简单,没有什么可说的。不过TAO对标准的名字 服务做了一个有趣的扩展,即可以利用multicast来得到名字服务。不过个人认 为除了方便了那么一点点之外,用处不大。而如果当局域网内有多个主机同时 运行名字服务时,会造成混乱。 此外,TAO还提供了NT_Naming_Service,可以将名字服务注册为NT的服务。 一. 启动名字服务 名字服务的文件名为:Naming_Service.exe,它的启动参数有: % Naming_Service [-ORBNameServicePort nsport] [-o ior_output_file] [-p pid_file_name] [-s context_size] [-t time] [-f persitence_file_name] [-b base_address] [-m (1=enable multicast responses,0=disable(default)] -ORBNameServicePort nsport:指定名字服务监听multicast包的端口号。 只有在使用了'-m 1'时才有效. -o ior_output_file: 指定文件名, 用来保存名字服务的根上下文的IOR. -p pid_file_name: 指定文件名,用来保存名字服务程序的进程id -s context_size: 当创建上下文时, 指定新上下文使用的哈希表的大小, 默认1024 -t time: 名字服务监听的时间, 单位:秒. 默认: 无限 -f persistence_file_name: 指定文件名, 用来存放名字服务中被绑定的对象引用. -m (1=enable multicast responses,0=disable(default): 是否使用多播功能. 运行名字服务时, 可以使用-ORBEndpoint参数来指定其运行的端点(有关 -ORBEndpoint的详细内容参见文档: $TAO_ROOT\docs\ORBEndpoint.html): Naming_Service -ORBEndpoint iiop://localhost:2809 -m 0 (名字服务在本机的2809端口监听请求, 不使用多播方式) 二. 访问名字访问 这里均假定使用Naming_Service -ORBEndpoint iiop://localhost:2809 -m 0 来启动名字访问. 客户端有多种方法来访问名字服务: 第一种方法: 启动客户程序时用corbaloc指定初始引用: MessengerServer -ORBInitRef NameService=corbaloc::localhost:2809/NameService 在MessengerServer源程序中, 直接使用: orb->resolve_initial_references("NameService"); 来得到名字服务. 第二种方法: 客户程序启动时不带参数: MessengerServer 而在MessengerServer源程序中, 使用: orb->string_to_object("corbaloc::localhost:2809/NameService"); 来得到名字服务. 三. TAO_Naming_Client和TAO_Naming_Server类: 1. TAO_Naming_Client类: 将访问名字服务部分的代码进行了封装. 使用方法: //--------------------------------------------- #include <Naming/Naming_Utils.h> TAO_Naming_Client naming_client; if (naming_client.init(orb.in()) != 0) { cerr << "Could not initialize naming client." << endl; return 1; } // 解析 CORBA::Object_var obj = naming_client->resolve(name); // 绑定 naming_client->rebind(name, obj_ref.in()); 2. TAO_Naming_Server类: 使用该类, 可以将名字服务功能集成到自己的应用 程序中. 有关TAO_Naming_Server类的使用方法, 见: 咦, 这个例程不在TAO的标准包 中, 是OCI公司的examples. 我硬盘上的这个忘了是从那里下载的了, 如果有人需 要的话给我写信好了. 四. 名字服务工具 在$TAO_ROOT\utils目录下, 有NamingViewer和nslist两个名字服务的工具. 有兴趣的话编译出来玩玩.:-) |