在TAO平台執行乙個簡單CORBA例項

2021-06-16 06:15:38 字數 4321 閱讀 5018

在path中新增 %ace_root%/bin;%ace_root%/lib

2、設定vs

專案和解決方案——vc++目錄

在可行檔案中新增:

$(ace_root)/bin

$(ciao_root)/bin

$(xercescroot)/bin

在包含檔案中新增:

$(ace_root)

$(tao_root)

$(tao_root)/orbsvcs

$(ciao_root)

$(ciao_root)/ciao

$(xercescroot)/include

$(dance_root)

在庫檔案中新增:

$(ace_root)/lib

$(xercescroot)/lib

3、設定啟動專案。

4、在%ace_root%/ace目錄下新增乙個檔案config.h,並在其中新增如下內容:

/* -*- c++ -*- */

* @file config.h

#define ace_has_standard_cpp_library 1

#include "ace/config-win32.h"

若是在其它平台上進行編譯,還需要新增檔案:

$ace_root/include/makeinclude/platform_macros.gnu

具體方法見ace installation guide。

二、編寫idl

1、建乙個空的解決方案,然後在該解決方案目錄下新建乙個名為idl的空的win32 控制台應用工程(對於一般的tao工程,無需單獨為idl建乙個project,但由於我們要重用該idl,所以單獨為其建立乙個工程比較便於管理)。

#ifndef __echo_idl__

#define __echo_idl__

inte***ce echo

virtual ~echo_i() {}

virtual char* echostring(const char* mesg);

char* echo_i::echostring(const char* mesg)

cerr << "upcall " << mesg << endl;

return corba::string_dup(mesg);

int main(int argc, char** argv)

try {

// initialize orb

corba::orb_var orb = corba::orb_init(argc, argv);

// find rootpoa

corba::object_var obj = orb->resolve_initial_references("rootpoa");

portableserver::poa_var poa = portableserver::poa::_narrow(obj);

// create servant object and activate it

echo_i* myecho = new echo_i();

portableserver::objectid_var myechoid = poa->activate_object(myecho);

// obtain a reference to the object, and print it out as a

// stringified ior.

obj = myecho->_this();

corba::string_var sior(orb->object_to_string(obj));

cerr << (char*)sior << endl;

myecho->_remove_ref();

// find and activate poamanager

portableserver::poamanager_var pman = poa->the_poamanager();

pman->activate();

orb->run();

catch(corba::systemexception&) {

cerr << "caught corba::systemexception." << endl;

catch(corba::exception&) {

cerr << "caught corba::exception." << endl;

catch(...) {

cerr << "caught unknown exception." << endl;

return 0;

使該工程依賴於前面的工程idl(在eg1_svr專案上點右鍵->專案依賴項->依賴項->選中idl)。由於這是乙個server程式,需要鏈結tao_portableserverd.lib(在eg1_svr專案上點右鍵->屬性->配置屬性->鏈結器->輸入->附加依賴項->輸入tao_portableserverd.lib )。

在eg1_svr專案上點右鍵->生成。

新建乙個eg1_cli工程,新增到當前solution,在該工程中新增乙個名為eg1_cli.cpp的檔案,其內容如下:

#include

#include "../idl/echoc.h"

using namespace std;

static void hello(echo_ptr e)

corba::string_var src = (const char*) "hello!";

corba::string_var dest = e->echostring(src);

cerr << "i said, /"" << (char*)src << "/"." << endl

<< "the echo object replied, /"" << (char*)dest <<"/"." << endl;

int main(int argc, char* argv) {

try {

// initialize orb

corba::orb_var orb = corba::orb_init(argc, argv);

// check arguments

if (argc != 2) {

cerr << "usage: eg1_cli " << endl;

throw 1;

// obtain reference from servant ior

corba::object_var obj = orb->string_to_object(argv[1]);

echo_var echoref = echo::_narrow(obj);

if( corba::is_nil(echoref) ) {

cerr << "can't narrow reference to type echo (or it was nil)." << endl;

return 1;

for (corba::ulong count=0; count<10; count++)

// communicate with servant

hello(echoref);

orb->destroy();

catch(corba::comm_failure&) {

cerr << "caught system exception comm_failure -- unable to contact the "

<< "object." << endl;

catch(corba::systemexception&) {

cerr << "caught a corba::systemexception." << endl;

catch(corba::exception&) {

cerr << "caught corba::exception." << endl;

catch(...) {

cerr << "caught unknown exception." << endl;

return 0;

使該工程依賴於前面的工程idl,編譯(即生成)該工程。

**比較簡單,請自行參照注釋閱讀源**。

三、執行

1、執行時應先開啟乙個dos命令視窗,啟動eg1_svr,該程式會在標準輸出上輸出一長串字元,即servant的ior資訊,我們有了該資訊就可以通過orb->string_to_object(...)連線到相應的servant了。

2、現在可以啟動客戶程式eg1_cli了,啟動eg1_cli時應再開啟乙個dos視窗,並將上面獲得的ior串作為引數傳遞給該程式(注意,從console上拷貝下來的時候會折行,將其拷貝到文字編輯器中去掉折行再拷出來即可)。

在乙個python裡執行另乙個python檔案

os.popen cmd,mode r buffering 1 command 呼叫的命令 mode 模式許可權可以是 r 預設 或 w bufsize 指明了檔案需要的緩衝大小 0意味著無緩衝 1意味著行緩衝 其它正值表示使用引數大小的緩衝 大概值,以位元組為單位 負的bufsize意味著使用系統...

TAO 專案 乙個直觀的UI 測試工具集 一

如今,幾乎所有的商業軟體都有乙個圖形使用者介面 gui 從使用者的角度看,乙個直觀的功能正確的gui往往比軟體的功能更重要。根據 a comprehensive framework for testing graphical user inte ces 的統計顯示,gui通常佔總 量的45 60 測...

乙個簡單的通用協議測試軟體(平台)

在乙個公司看到的乙個協議測試系統,用c 實現,然後在裡面可以按照自己的想法完全自定義字段屬性什麼的。之前老是除錯伺服器與客戶端,每次都為了協議的事除錯半天,兩邊都要配人,很影響效率,最近加入一家公司又聽聞此事重演,有心想做這樣的乙個測試軟體,這個軟體只是用來除錯協議,提供測試資料,並顯示返回的測試資...