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