TAO使用指南
标 题: 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: tao-users@cs.wustl.edu
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两个名字服务的工具.
有兴趣的话编译出来玩玩.:-)