在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b

首先需要到http://omniorb.sourceforge.net/下载一个win32的OmniORB。我下载的是的文件名是"omniORB-4.1.0-x86_win32_vc6.zip"。然后解压缩,我吧整个包解压缩的"C:\"。

第二步,设置环境变量。想要在cmd中使用omniidl编译器需要先设置path。path的值设置如下:将“C:\omniORB-4.1.0\bin\x86_win32”加入到path中。

第三步,使用记事本写一个time.idl文件。文件内容如下:
interface Time{
    short get_gmt();
};
idl文件定义了的Time接口,其中包含一个get_gmt()方法。

第四步,在cmd中对idl进行编译:进入time.idl文件所在目录,使用omniidl -bcxx time.idl 对time.idl进行编译。其中-bcxx告诉编译器将idl映射为C++,如果编译没有错误,则会在同一个目录下生成两个文件:分别是time.hh,和timeSK.cc。time.hh是所有的接口,类型的定义所在的文件,服务器和客户端的实现都需要这两个文件。

第五步,修改time.hh和timeSK.cc。将两个文件的后缀名分别改成.h和.cpp并在timeSK.cpp中将#include 的文件由time.hh改成time.h。这样改的目的在于,在VC6中开发的时候,编译器是根据后缀名来进行编译的,如果是.cc那么将VC6将无法为其编译。

第六步,新建一个VC6 win32 Console的空项目。将time.h和timeSK.cpp拷贝到项目所在目录,并将文件插入到项目中,新建一个myserver.cpp的文件。
#include <iostream.h>
#include "time.h"

class Time_impl:public virtual POA_Time{
public :
   virtual short get_gmt();
};

short Time_impl::get_gmt(){
   return 1;
}

int main(int argc, char* argv[]){
   try{
       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);
       PortableServer::POAManager_var mgr
           =poa->the_POAManager();

       mgr->activate();

       Time_impl time_servant;

       Time_var tm = time_servant._this();
       CORBA::String_var str = orb->object_to_string(tm);
       cout<<str<<endl;

       orb->run();

   }catch(const CORBA::Exception&){
       cerr<<"exception"<<endl;
       return 1;
   }
   return 0;
} 最后的如图所示。
在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第1张图片
第七步,设置VC6开发环境。因为开编译过程中需要使用到omniORB的一些库和宏定义,需要对VC进行设置。
Tools->Options选择Directory标签,加入OmniORB的lib和include路径。
在Include files下加入OmniORB4的头文件,见最后一行。
在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第2张图片

在Libraryfile中添加OmniORB的lib路径。

在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第3张图片

Project->Setting,选择C++,分别对C++ Language, Code Generation,和Preprocessor进行设置。
C++ Language 下选择“Enable Exception Handling”
在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第4张图片

Code Generation下选择“Run-time Library ”选择MultiThreaded DLL



Preprocessor中添加宏定义:“__WIN32__,__x86__,_WIN32_WINNT=0x0400,__NT__,__OSVERSION__=4”。

在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第5张图片

选择Link选项卡,Category选择Input,添加库模块 ws2_32.lib mswsock.lib advapi32.lib omniORB410_rt.lib omniDynamic410_rt.lib omnithread32_rt.lib(需要将C:\omniORB-4.1.0\lib\x86_win32\omnithread33_rt.lib中33改成32)

在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第6张图片

至此,关于VC6的设置完毕。

第八步,编译timeSK.cpp,myserver.cpp,最后生成myserver.exe文件。

第九步,现在开始写Client程序,方式和Server一样,timeSK.cpp,time.h,和myserver.cpp中关于实现Time_impl类的代码都需要(后证实,可以省略),除此之外,还应该增加一个myclient.cpp文件。内容如下:
#include <iostream.h>
#include "time.h"
int main(int argc,char* argv[]){
   try{
       cout<<"OK0";
       if(argc!=2){
           throw 0;
       }
           cout<<"OK0.1";
       CORBA::ORB_var orb = CORBA::ORB_init(argc,argv);
           cout<<"OK0.2";
       CORBA::Object_var obj = orb->string_to_object(argv[1]);
               cout<<"OK0.3";
       cout<<"OK1";
       if(CORBA::is_nil(obj)){
           cerr<<"Nil Time Reference"<<endl;
           throw 0;
       }

       cout<<"OK2";
       Time_var tm = Time::_narrow(obj);
       if(CORBA::is_nil(tm)){
           cerr<<"Nil Time Reference"<<endl;
           throw 0;
       }
       cout<<"OK3";
       cout<<"Time is"<<tm->get_gmt()<<endl;

   }catch(const CORBA::Exception&){
       cerr<<"Exception"<<endl;
       return 1;
   }
   return 0;
}
注意,此myclient项目也需要对其进行VC6的project->setting的设置,方法和myserver的一样。
第十步,运行server,获得IOR,将IOR作为参数运行mycliet.exe。注意,参数需要“IOR:××××××××”。程序运行结果如下图,调用CORBA对象的get_gmt之后,CORBA的伺服程序servant返回了数值1。
在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b_第7张图片

你可能感兴趣的:(在Windows下使用OmniORB+VC6开发CORBA http://hi.baidu.com/billyboy/item/4bf406dfd792d8e4785daa7b)