echo.idl
//Source file: E:/CorbaProj/UML/T1/idl/Echo.idl
#ifndef __ECHO_DEFINED
#define __ECHO_DEFINED
/* CmIdentification
%X% %Q% %Z% %W% */
module CorbaTest {
interface Echo {
/*
@roseuid 4459B6B1038A */
string echoString (
in string mesg
);
};
};
#endif
#########################################################################
Server端
#include <iostream.h>
#include "echo.h"
// This is the object implementation.
class Echo_i : public POA_Echo,
public PortableServer::RefCountServantBase
{
public:
inline Echo_i() {}
virtual ~Echo_i() {}
virtual char* echoString(const char* mesg);
};
char* Echo_i::echoString(const char* mesg)
{
return CORBA::string_dup("fffffffffffffffff");
}
int main(int argc, char** argv)
{
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
Echo_i* myecho = new Echo_i();
PortableServer::ObjectId_var myechoid = poa->activate_object(myecho);
obj = myecho->_this();
CORBA::String_var sior(orb->object_to_string(obj));
cerr << "’" << (char*)sior << "’" << endl;
myecho->_remove_ref();
PortableServer::POAManager_var pman = poa->the_POAManager();
pman->activate();
orb->run();
orb->destroy();
return 0;
}
#############################################################
client
#include <iostream.h>
#include "echo.h"
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 {
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
if( argc != 2 ) {
cerr << "usage: eg2_clt <object reference>" << endl;
return 1;
}
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++)
hello(echoref);
orb->destroy();
}
catch(CORBA::COMM_FAILURE& ex) {
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(omniORB::fatalException& fe) {
cerr << "Caught omniORB::fatalException:" << endl;
cerr << " file: " << fe.file() << endl;
cerr << " line: " << fe.line() << endl;
cerr << " mesg: " << fe.errmsg() << endl;
}
catch(...) {
cerr << "Caught unknown exception." << endl;
}
return 0;
}
VC6 client运行时参数 IORXXXXXX
注意生成代码时,有CORBAModule和没有CORBAModule的区别
IOR例子:
IOR:010000000d00000049444c3a4563686f3a312e30000000000
10000000000000064000000010102000e0000003136362e3139322e312e32
31330029040e000000feb9ac5a44000003fc000000000000000200000000000000
080000000100000000545441010000001c00000001000000010001000100000001
000105090101000100000009010100