Ice開發初步——HelloWorld的實現

初識ICE,試着使用slice語言在vs2010下編寫HelloWorld程序,參考了官網http://www.zeroc.com/index.html及網絡帖子上的思路,終成。現在記錄一下。

1.在官網上下載最新版本的ice開發包http://www.zeroc.com/download.html,最新爲Ice-3.4.2.msiIce-3.4.2-ThirdParty.msi。下載後解壓到我本地E盤ICE文件夾下。

2.在IDE中設置項目需要包含的目錄,vs設置全局目錄的方式不同與之前版本。設置方法是:

在IDE中,打開視圖-》屬性管理器。展開任意一個項目的樹形後,有一個名爲“Microsoft.Cpp.Win32.user”的項目(如下圖)。這個就是全局目錄了。將ICE的bin目錄添加進可執行文件目錄,include添加進包含目錄,lib添加進庫目錄

 

3 將slice2cpp作爲外部工具添加到vs2010.

具體步驟:在IDE的工具-》外部工具-》添加 中,設置如下圖

4 創建名爲Printer的slice文件,用記事本編寫即可,注意文件保存爲.ice後綴形式。Printer.ice的內容如下:

module Demo
{
    interface Printer
     {
           void printString(string s);
      };
};

5創建名爲HelloWorld的空白解決方案。

在新建項目->其他項目類型->visual studio解決方案。

6在空白解決方案中添加名爲Ice的空白靜態庫項目。

將Printer.ice放置到Ice項目文件夾下,然後在Ice項目的資源文件中添加現有項Printer.ice.然後執行slice2cpp工具命令。

此時Ice項目文件夾下已增加了Printer.h和Printer.cpp文件,將它們分別添加到源文件和頭文件的文件夾中,這裏還需要將源文件中的#include<Printer.h>改爲#include"Printer.h"

生成項目,通過!

7添加一個名爲Client的win32控制檯應用程序的空白項目。

在屬性頁配置屬性->鏈接器->輸入->附加依賴項加加入iced.lib和iceutild.lib

在屬性頁的通用屬性->框架和應用中添加新應用選擇Ice,爲項目的源文件文件夾下添加名爲Client.cpp的源文件。內容爲:

#include <Ice/Ice.h>
#include "../Ice/Printer.h"


using namespace std;
using namespace Demo;


int main(int argc, char * argv[])
{
 int status = 0;
 Ice::CommunicatorPtr ic;
 
 try 
 {
  ic = Ice::initialize(argc, argv);
  Ice::ObjectPrx base = ic->stringToProxy("SimplePrinter:default -p 10000");
  PrinterPrx printer = PrinterPrx::checkedCast(base);
  if (!printer) throw "Invalid proxy";
  printer->printString("Hello World!");
 } catch (const Ice::Exception & ex) 
 {
  cerr << ex << endl;
  status = 1;
 } catch (const char * msg) 
 {
  cerr << msg << endl;
  status = 1;
 }
 if (ic) ic->destroy();
 return status;
}

編譯,通過!

3建立名爲Server的空白win32控制檯程序。

在屬性頁配置屬性->鏈接器->輸入->附加依賴項加加入iced.lib和iceutild.lib

在屬性頁的通用屬性->框架和應用中添加新應用選擇Ice,爲項目的源文件文件夾下添加名爲Server.cpp的源文件。內容爲:

#include "../Ice/Printer.h"
#include <Ice/Application.h>
#include <Ice/Ice.h>

using namespace std;
using namespace Demo;

class PrinterI : public Printer 
{
 public:
  virtual void printString(const string& s,const Ice::Current&);
};

void PrinterI::printString(const string& s, const Ice::Current&)
{
 cout << s << endl;
}

int  main(int argc, char* argv[])
{
 int status = 0;
 Ice::CommunicatorPtr ic;
 
 try 
 {
  ic = Ice::initialize(argc, argv);
  Ice::ObjectAdapterPtr adapter= ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000");
  Ice::ObjectPtr object = new PrinterI;
  adapter->add(object,ic->stringToIdentity("SimplePrinter"));
  
  adapter->activate();
  ic->waitForShutdown();
 } catch (const Ice::Exception& e) 
 {
  cerr << e << endl;
  status = 1;
 } catch (const char* msg) 
 {
  cerr << msg << endl;
  status = 1;
 }
 if (ic) 
 {
  try 
  {
   ic->destroy();
  } catch (const Ice::Exception& e) 
  {
   cerr << e << endl;
   status = 1;
  }
 }
 return status;
}

編譯,通過。

4在項目文件夾下的debug目錄下先運行Server.exe,再運行Client.exe。

運行是提示少3個dll文件ice34d.dll、iceutil34d.dll、和bzip2d.dll,從ICE目錄下找到並複製過去,注意要複製對應vs2010的vc100目錄下的dll文件。

先運行Server.exe,再運行Client.exe,在Server端出現了HelloWorld,成功!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章