锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎶婁竴浜涘父鐢ㄧ殑浠g爜,濡傚嚱鏁?綾葷瓑,緙栬瘧鎴愪竴涓?鍖?鍗矰LL(WINDOWS涓?鎴栬匰O(LINUX涓?鏂囦歡,
鐒跺悗渚涘叾瀹冪▼搴忎嬌鐢ㄦ椂鐩存帴璋冪敤閲岄潰灝侀棴鐨勫嚱鏁板嵆鍙?瀹炵幇鐨勪唬鐮佺殑閲嶇敤,涔熻妭鐪佷簡
紜洏絀洪棿(榪欑偣鍙兘鏄瑕佺殑鍚?.鍦╓IDOWS涓嬪埄鐢╒C++鍙柟渚跨殑鐢熸垚DLL,鍦↙INUX涓嬪垯闇瑕侀氳繃
鍚勭緙栬瘧鍛戒護鏉ュ疄鐜?瀵逛簬鍍忔垜榪欑鑿滈笩綰х▼搴忓憳鏉ヨ鏄釜涓嶅皬鐨勬寫鎴?
涓嬮潰鐢ㄤ釜綆鍗曠殑渚嬪瓙鏉ヨ鏄庣敓鎴愪竴涓?SO鏂囦歡鍜屽浣曚嬌鐢ㄥ畠:
1.鎴戣繖鏈夊嚑涓枃浠?
ConfigMap.cpp ConfigMap.h (璇婚厤緗枃浠剁被)GetWinState.cpp GetWinState.h(ICE鎺ュ彛鏂囦歡,鐢盨LICE鐢熸垚) GetWinSysState.cpp GetWinSysState.h (榪滅▼鎺ュ彛瀹炵幇鏂囦歡)
SocDbInfo.cpp(灝佽鐨勪竴涓被,鐢ㄤ簬璋冪敤ICE鎺ュ彛瀹炵幇鐩稿叧鎿嶄綔)
璇存槑:姝ょ▼搴忔槸涓轟簡鑾峰緱榪滅▼涓繪満(WINDOWS)涓婁竴浜涚郴緇熶俊鎭?姣斿:CPU鍗犵敤鐜?紜洏浣跨敤鎯呭喌,鏁版嵁
搴撹繛鎺ョ姸鎬?鍐呭瓨浣跨敤鎯呭喌絳?
鎴戞兂鍒╃敤榪欎簺鏂囦歡鐢熸垚鍔ㄦ侀摼鎺ュ簱.SO,涓昏鏄皟鐢⊿ocDbInfo.cpp閲岀殑綾?鐒跺悗鍙互鎷垮埌浠繪剰涓涓郴緇熶腑(LINUX)鍘葷敤.
2.寮濮嬬紪璇?$c++ -I. -I$ICE_HOME/include -c *.cpp
緙栬瘧鍚庣敓鎴愯繛鎺ユ枃浠?鎴戜竴鐩磋繖鏍峰彨,鍙兘涓嶅鍝?,鍗充互.O緇撳熬鐨?br />3.鐢熸垚鍔ㄦ侀摼鎺ュ簱:$c++ -shared -o聽libMyApp.so *.o -L$ICE_HOME/lib -lIce -lIceUtil
榪欐牱灝辯敓鎴愪簡libMyApp.so鏂囦歡,鍗蟲垜浠墍瑕佺殑
4.浣跨敤鍔ㄦ侀摼鎺ュ簱:
鏂板緩涓や釜鏂囦歡Demo.cpp Demo.h(浣跨敤libMyApp.so鎻愪緵鐨勪竴浜涘嚱鏁?,
鍦―emo.h涓0鏄庝簡libMyApp.so涓彁渚涚殑鍑芥暟鍜岀粨鏋勪綋,
Demo.h:浠g爜濡備笅:
struct MemoryInf
{
聽int TotalMem;//脳脺脛脷麓忙麓貿脨隆
聽int ValidMem;//驢脡脢鹿脫脙脛脷麓忙麓貿脨隆
聽int VirtualMem;//脨茅脛芒脛脷麓忙麓貿脨隆
};
struct DiskInf
{
聽int TotalSpace;//脫虜脜脤麓貿脨隆
聽int FreeSpace;//脢攏脫脿驢脮錄盲麓貿脨隆
};
struct DbInf
{
聽int DbStat;//脢媒戮脻驢芒脳麓脤盧:"0"鹵鉚脢戮脢媒戮脻驢芒麓婁脭脷鹿脴鹵脮脳麓脤盧,"1"鹵鉚脢戮脢媒戮脻驢芒脮媒魯攏麓貌驢陋,"2"鹵鉚脢戮脢媒戮脻驢芒麓婁脭脷鹿脪脝冒脳麓脤盧
聽int DbConnNum;//脢媒戮脻驢芒脕盧陸脫脢媒
};
bool Inital( char *ResHostIP);//魯玫脢錄祿爐脥簍脨脜脝梅
bool DesIceCom();//脧煤祿脵ICE脥簍脨脜脝梅
MemoryInf GetMemInf();//碌脙碌陸脛脷麓忙脨脜脧壟
int GetCpuInf();//碌脙碌陸CPU脮錄脫脙脗脢
DbInf GetDbStat();//碌脙碌陸脢媒戮脻驢芒脨脜脧壟
DiskInf GetDiskStat();//碌脙碌陸脫虜脜脤脨脜脧壟
娉?涔辯爜鏄敱浜庢垜鐨凩INUX涓嬩笉鏀寔涓枃鍝?鏄敞閲婁笉鐢ㄧ瀹?br />Demo.cpp:浠g爜濡備笅:
#include <string.h>
#include <iostream>
#include "Demo.h"
int main( int argc , char* argv[])
{
聽MemoryInf mymem;
聽DiskInf mydisk;
聽DbInf mydb;
聽Inital( argv[1]);
聽mydisk = GetDiskStat();
聽mymem = GetMemInf();
聽mydb = GetDbStat();
聽printf("disk total space:%d\n",mydisk.TotalSpace);
聽printf("disk FreeSpace space:%d\n",mydisk.FreeSpace);
聽printf("Memory TotalMem:%d\n",mymem.TotalMem);
聽printf("ValidMem:%d\n",mymem.ValidMem);
聽printf("VirtualMem:%d\n",mymem.VirtualMem);
聽printf("DbConnNum:%d\n",mydb.DbConnNum);
聽printf("DbStat:%d\n",mydb.DbStat);
聽printf("cpu:%d\n",GetCpuInf());
聽DesIceCom();
聽return 1;
}
5.緙栬瘧鏂囦歡鐢熸垚鍙墽琛岀▼搴?
鐢ㄤ互涓嬪懡浠?
$c++聽-lMyApp聽-o聽Demo聽Demo.cpp
璇存槑:-lMyApp鍙傛暟琛ㄧず,鐢ㄥ姩鎬侀摼鎺ュ簱libMyApp.so涓璧瘋繘琛岀紪璇?瀵逛簡libMyApp.so鏈濂芥斁鍦?usr/lib鐩綍涓嬪搱
濡備笉鍑烘剰澶栧垰浼氱敓鎴愬悕涓篋emo鐨勫彲鎵ц鏂囦歡
棣栧厛錛岃澶у璇籌CE涓枃鎵嬪唽涓殑Slice璇█涓绔犮?榪欎竴閮ㄥ垎闄や簡model錛堟ā鍧楋級錛屽湪 ICE 1.3涓枃鎵嬪唽涓兘鏈夋弿榪?
鍚湁Slice 瀹氫箟鐨勬枃浠跺繀欏諱互.ice 鎵╁睍鍚嶇粨灝撅紝渚嬪錛?Clock.ice灝辨槸涓涓湁鏁堢殑鏂囦歡鍚嶃傜紪璇戝櫒鎷掔粷鎺ュ彈鍏朵粬鎵╁睍鍚嶃?
Slice 鏀寔#ifndef銆?define銆?endif錛屼互鍙?include 棰勫鐞嗘寚浠ゃ傚畠浠殑浣跨敤鏂瑰紡鏈変弗鏍肩殑闄愬埗錛氫綘鍙兘鎶?ifndef銆?define錛屼互鍙?endif 鎸囦護鐢ㄤ簬鍒涘緩鍙屽寘鎷紙double-include錛夊潡銆備緥濡傦細
#ifndef _CLOCK_ICE #define _CLOCK_ICE // #include 鏂囦歡 here... //瀹氫箟 here... #endif _CLOCK_ICE
鎴戜滑寮虹儓寤鴻浣犲湪鎵鏈夌殑Slice 瀹氫箟涓嬌鐢ㄥ弻鍖呮嫭錛坉ouble-include錛夊潡錛堟墍涓婏級錛岄槻姝㈠嬈″寘鎷悓涓鏂囦歡銆?
#include 鎸囦護鍙兘鍑虹幇鍦⊿lice 婧愭枃浠剁殑寮澶達紝涔熷氨鏄錛屽畠浠繀欏誨嚭鐜板湪鍏朵粬鎵鏈塖lice 瀹氫箟鐨勫墠闈€傛澶栵紝鍦ㄤ嬌鐢?include 鎸囦護鏃訛紝鍙厑璁鎬嬌鐢?lt;> 璇硶鏉ユ寚瀹氭枃浠跺悕錛屼笉鑳戒嬌鐢?"銆備緥濡傦細
#include <File1.ice> // OK #include "File2.ice" // 涓嶆敮鎸?
浣犱笉鑳芥妸榪欎簺棰勫鐞嗘寚浠ょ敤浜庡叾浠栫洰鐨勶紝涔熶笉鑳戒嬌鐢ㄥ叾浠栫殑C++ 棰勫鐞嗘寚浠?錛堟瘮濡傜敤\ 瀛楃鏉ヨ繛鎺ヨ銆乼oken 綺樿創錛屼互鍙婂畯灞曞紑錛岀瓑絳夛級銆?
鍦⊿lice 瀹氫箟閲岋紝鏃㈠彲浠ヤ嬌鐢– 鐨勩佷篃鍙互浣跨敤C++ 鐨勬敞閲婇鏍鹼細
Slice 鍏抽敭瀛楀繀欏誨皬鍐欍備緥濡傦紝 class 鍜宒ictionary 閮芥槸鍏抽敭瀛楋紝蹇呴』鎸夌収鎵紺烘柟寮忔嫾鍐欍傝繖涓鍒欐湁涓や釜渚嬪錛歄bject 鍜孡ocalObject 涔熸槸鍏抽敭瀛楋紝蹇呴』鎸夌収鎵紺烘柟寮忚棣栧瓧姣嶅ぇ鍐欍?
鏍囪瘑絎︿互涓涓瓧姣嶈搗澶達紝鍚庨潰鍙互璺熶換鎰忔暟鐩殑瀛楁瘝鎴栨暟瀛椼係lice 鏍囪瘑絎﹁闄愬埗鍦ˋSCII 瀛楃鑼冨洿鍐咃紝涓嶈兘鍖呭惈闈炶嫳璇瓧姣嶏紝涓嶤++ 鏍囪瘑絎︿笉鍚岋紝 Slice 鏍囪瘑絎︿笉鑳芥湁涓嬪垝綰褲傝繖縐嶉檺鍒跺垵鐪嬩笂鍘繪樉寰楀緢鑻涘埢錛屼絾鍗存槸蹇呰鐨勶細淇濈暀涓嬪垝綰匡紝鍚勭璇█鏄犲皠灝辮幏寰椾簡涓涓悕瀛楃┖闂達紝涓嶄細涓庡悎娉曠殑Slice 鏍囪瘑絎﹀彂鐢熷啿紿併備簬鏄紝榪欎釜鍚嶅瓧絀洪棿鍙敤浜庡瓨鏀句粠Slice 鏍囪瘑絎︽淳鐢熺殑鍘熺敓璇█鏍囪瘑絎︼紝鑰屼笉鐢ㄦ媴蹇冨叾浠栧悎娉曠殑Slice 鏍囪瘑絎︿細紕板閥涓庝箣鐩稿悓錛屼粠鑰屽彂鐢熷啿紿?銆?
鏍囪瘑絎︼紙鍙橀噺鍚嶇瓑絳夛級鏄ぇ灝忓啓涓嶆晱鎰熺殑錛屼絾澶у皬鍐欑殑鎷煎啓鏂瑰紡蹇呴』淇濇寔涓鑷達紙鐪嬩簡鍚庨潰鐨勮瘽錛屽啀鐞嗚В涓涓嬶級銆備緥濡傦紝鍦ㄤ竴涓綔鐢ㄥ煙鍐咃紝 TimeOfDay 鍜孴IMEOFDAY 琚涓烘槸鍚屼竴涓爣璇嗙銆備絾鏄紝Slice 瑕佹眰浣犱繚鎸佸ぇ灝忓啓鐨勪竴鑷存с傚湪浣犲紩鍏ヤ簡涓涓爣璇嗙涔嬪悗錛屼綘蹇呴』濮嬬粓涓鑷村湴鎷煎啓瀹冪殑澶у啓鍜屽皬鍐欏瓧姣嶏紱鍚﹀垯錛岀紪璇戝櫒灝變細灝嗗叾瑙嗕負闈炴硶鑰屽姞浠ユ嫆緇濄傝繖鏉¤鍒欎箣鎵浠ュ瓨鍦紝鏄璁㏒lice 鏃㈣兘鏄犲皠鍒板拷鐣ユ爣璇嗙澶у皬鍐欑殑璇█錛屽張鑳芥槧灝勫埌鎶婂ぇ灝忓啓涓嶅悓鐨勬爣璇嗙褰撲綔涓嶅悓鏍囪瘑絎︾殑璇█銆傦紙鍙互榪欐牱鐞嗚В錛屽彉閲忓悕鍖哄垎澶у皬鍐欙紝騫朵笖涓嶅彲浠ユ槸鐩稿悓鐨勫崟璇嶏級
鏄叧閿瓧鐨勬爣璇嗙:浣犲彲浠ュ畾涔夊湪涓縐嶆垨澶氱瀹炵幇璇█涓槸鍏抽敭瀛楃殑Slice 鏍囪瘑絎︺備緥濡傦紝switch鏄畬鍏ㄥ悎娉曠殑Slice鏍囪瘑絎︼紝浣嗕篃鏄疌++鍜孞ava鐨勫叧閿瓧銆傝璦鏄犲皠瀹氫箟浜嗕竴浜涜鍒欐潵澶勭悊榪欐牱鐨勬爣璇嗙銆傝瑙e喅榪欎釜闂錛岄氬父瑕佺敤涓涓墠緙鏉ヤ嬌鏄犲皠鍚庣殑鏍囪瘑絎︿笉鍐嶆槸鍏抽敭瀛椼備緥濡傦紝 Slice 鏍囪瘑絎witch 琚槧灝勫埌C++ 鐨刜cpp_switch 錛屼互鍙奐ava 鐨刜switch銆傚鍏抽敭瀛楄繘琛屽鐞嗙殑瑙勫垯鍙兘浼氫駭鐢熼毦浠ラ槄璇葷殑婧愮爜銆傚儚native銆乼hrow錛屾垨export 榪欐牱鐨勬爣璇嗙浼氫笌C++ 鎴朖ava錛堟垨涓よ咃級鐨勫叧閿瓧鍙戠敓鍐茬獊銆備負浜嗚浣犲拰鍒漢鐢熸椿寰楁洿杞繪澗涓鐐癸紝浣犲簲璇ラ伩鍏嶄嬌鐢ㄦ槸瀹炵幇璇█鐨勫叧閿瓧鐨凷lice 鏍囪瘑絎︺傝璁頒綇錛屼互鍚嶪ce 鍙兘浼氬鍔犻櫎C++ 鍜孞ava 浠ュ鐨勮璦鏄犲皠銆傚敖綆℃湡鏈涗綘鎬葷粨鍑烘墍鏈夋祦琛岀殑緙栫▼璇█鐨勬墍鏈夊叧閿瓧騫朵笉鍚堢悊錛屼綘鑷沖皯搴旇灝介噺閬垮厤浣跨敤甯哥敤鐨勫叧閿瓧銆備嬌鐢ㄥ儚self銆乮mport錛屼互鍙妛hile 榪欐牱鐨勬爣璇嗙鑲畾涓嶆槸濂戒富鎰忋?
杞箟鐨勬爣璇嗙:鍦ㄥ叧閿瓧鐨勫墠闈㈠姞涓婁竴涓弽鏂滅嚎錛屼綘鍙互鎶奡lice 鍏抽敭瀛楃敤浣滄爣璇嗙錛屼緥濡?
struct dictionary { // 閿欒!
// ...
};
struct \dictionary { // OK
// ...
};
鍙嶆枩綰夸細鏀瑰彉鍏抽敭瀛楅氬父鐨勫惈涔夛紱鍦ㄥ墠闈㈢殑渚嬪瓙涓紝 \dictionary 琚綋浣滄爣璇嗙dictionary銆傝漿涔夋満鍒朵箣鎵浠ュ瓨鍦紝鏄璁╂垜浠湪浠ュ悗鑳藉鍦⊿lice 涓鍔犲叧閿瓧錛屽悓鏃跺敖閲忓噺灝戝宸叉湁瑙勮寖鐨勫獎鍝嶏細濡傛灉鏌愪釜宸茬粡瀛樺湪鐨勮鑼冪宸т嬌鐢ㄤ簡鏂板紩鍏ョ殑鍏抽敭瀛楋紝浣犲彧闇鍦ㄦ柊鍏抽敭瀛楀墠鍔犱笂鍙嶆枩綰匡紝灝辮兘澶熶慨姝h瑙勮寖銆傛敞鎰忥紝浠庨鏍間笂璇達紝浣犲簲璇ラ伩鍏嶇敤Slice 鍏抽敭瀛楀仛鏍囪瘑絎︼紙鍗充嬌鍙嶆枩綰胯漿涔夊厑璁鎬綘榪欎箞鍋氾級銆?
淇濈暀鐨勬爣璇嗙:Slice 涓篒ce 瀹炵幇淇濈暀浜嗘爣璇嗙Ice 鍙婁互Ice 錛堜換浣曞ぇ灝忓啓鏂瑰紡錛夎搗澶寸殑鎵鏈夋爣璇嗙銆備緥濡傦紝濡傛灉浣犺瘯鍥懼畾涔変竴涓悕涓篒cecream 鐨勭被鍨嬶紝 Slice 緙栬瘧鍣ㄤ細鍙戝嚭閿欒璀﹀憡3銆備互涓嬮潰浠諱綍涓縐嶅悗緙緇撳熬鐨凷lice 鏍囪瘑絎︿篃鏄繚鐣欑殑錛欻elper銆丠older銆丳rx錛屼互鍙奝tr銆侸ava 鍜孋++ 璇█鏄犲皠浣跨敤浜嗚繖浜涘悗緙錛屼繚鐣欏畠浠槸涓轟簡闃叉鍦ㄧ敓鎴愮殑浠g爜涓彂鐢熷啿紿併?
錛堟敞錛欼CE 1.3鐨勪腑鏂囨墜鍐屼笂娌℃湁鈥滄ā鍧椻濊繖涓閮ㄥ垎錛夋ā鍧楁潵緇勭粐涓緇勭浉鍏崇殑璇彞鏄負浜嗚В鍐沖悕瀛楀啿紿併傛ā鍧楀彲浠ュ寘鍚墍鏈夊悎娉曠殑Slice璇彞鍜屽瓙妯″潡銆備綘鍙互鐢ㄤ竴浜涗笉甯哥敤鐨勮瘝鏉ョ粰鏈澶栧眰鐨勬ā鍧楀懡鍚嶏紝姣斿鍏徃鍚嶃佷駭鍝佸悕絳夌瓑銆?
module ZeroC {
module Client {
// Definitions here...
};
module Server {
// Definitions here...
};
};
Slice瑕佹眰鎵鏈夌殑瀹氫箟閮芥槸妯″潡鐨勪竴閮ㄥ垎錛屾瘮濡傦紝涓嬮潰鐨勮鍙ュ氨鏄潪娉曠殑銆?
interface I { // 閿欒:鍏ㄥ眬絀洪棿涓彧鍙互鏈夋ā鍧?
// ...
};
澶氫釜鏂囦歡鍙互鍏變韓鍚屼竴涓ā鍧楋紝姣斿錛?
module ZeroC {
// Definitions here...
};
//鍙︿竴涓枃浠朵腑 :
module ZeroC { // OK, reopened module
// More definitions here...
};
鎶婁竴涓ぇ鐨勬ā鍧楁斁鍒板嚑涓枃浠朵腑鍘誨彲浠ユ柟渚跨紪璇戯紙浣犲彧闇閲嶆柊緙栬瘧琚慨鏀圭殑鏂囦歡錛岃屾病鏈夊繀瑕佺紪璇戞暣涓ā鍧楋級銆?
妯″潡灝嗘槧灝勭殑璇█涓殑鐩稿簲緇撴瀯錛屾瘮濡?C++, C#, 鍜?Visual Basic, Slice鐨刴odules琚槧灝勪負namespaces錛沯ava涓鏄犲皠涓簆ackage.
闄や簡灝戞暟涓庣壒瀹氱殑紼嬪簭璇█鐩稿叧鐨勮皟鐢ㄤ箣澶栵紝ice鐨勭粷澶ч儴鍒咥PI錛堝簲鐢ㄧ▼搴忔帴鍙o級閮芥槸鐢⊿lice鏉ュ畾涔夌殑 銆傝繖鏍峰仛鐨勫ソ澶勬槸鍙互鐢ㄤ竴涓狪CE API瀹氫箟鏂囦歡鏉ユ敮鎸佹墍鏈夌殑紼嬪簭璇█銆?
![]() |
娉ㄦ剰 |
|---|---|
| 涓轟簡淇濊瘉浠g爜鐨勭畝媧侊紝浠ュ悗鏂囩珷涓彁鍙婄殑Slice瀹氫箟娌℃湁鍐欏嚭鍖呭惈鐨勬ā鍧楋紝浣犺鍋囧畾璇ヨ鍙ユ槸鍦ㄤ竴涓ā鍧椾腑銆? |
鏋氫婦:enum Fruit { Apple, Pear, Orange };
榪欎釜瀹氫箟寮曞叆浜嗕竴縐嶅悕涓篎ruit 鐨勭被鍨嬶紝榪欐槸涓縐嶆嫢鏈夎嚜宸辨潈鍒╃殑鏂扮被鍨嬨傚叧浜庢庢牱鎶婇『搴忓鹼紙ordinal values錛夎祴緇欐灇涓劇鐨勯棶棰橈紝 Slice 娌℃湁浣滃嚭瀹氫箟銆備緥濡傦紝浣犱笉鑳藉亣瀹氾紝鍦ㄥ悇縐嶅疄鐜拌璦涓紝鏋氫婦絎range 鐨勫奸兘鏄?銆係lice 淇濊瘉鏋氫婦絎︾殑欏哄簭鍊間細浠庡乏鑷沖彸閫掑錛屾墍浠ュ湪鎵鏈夊疄鐜拌璦涓紝Apple 閮芥瘮Pear 瑕佸皬銆備笌C++ 涓嶅悓錛?Slice 涓嶅厑璁鎬綘鎺у埗鏋氫婦絎︾殑欏哄簭鍊鹼紙鍥犱負璁稿瀹炵幇璇█涓嶆敮鎸佽繖縐嶇壒鎬э級錛?
enum Fruit { Apple = 0, Pear = 7, Orange = 2 }; // 鍑洪敊
鍦ㄥ疄璺典腑錛屽彧瑕佷綘涓嶅湪鍦板潃絀洪棿涔嬮棿浼犻佹灇涓劇鐨勯『搴忓鹼紝浣犲氨涓嶇敤綆℃灇涓劇浣跨敤鐨勫兼槸澶氬皯銆備緥濡傦紝鍙戦佸? 緇欐湇鍔″櫒鏉ヨ〃紺篈pple 鍙兘浼氶犳垚闂錛屽洜涓烘湇鍔″櫒鍙兘娌℃湁鐢? 琛ㄧずApple銆傜浉鍙嶏紝浣犲簲璇ュ氨鍙戦佸糀pple 鏈韓銆傚鏋滃湪鎺ユ敹鏂圭殑鍦板潃絀洪棿涓紝 Apple 鏄敤鍙﹀鐨勯『搴忓艱〃紺虹殑錛?Ice run time 浼氶傚綋鍦扮炕璇戣繖涓箋?
涓庡湪C++ 閲屼竴鏍鳳紝 Slice 鏋氫婦絎︿篃浼氳繘鍏ュ洿緇曞畠鐨勫悕瀛楃┖闂達紝鎵浠ヤ笅闈㈢殑瀹氫箟鏄潪娉曠殑錛?
enum Fruit { Apple, Pear, Orange };
enum ComputerBrands { Apple, IBM, Sun, HP }; // Apple宸茬粡琚畾涔?
Slice 涓嶅厑璁稿畾涔夌┖鐨勬灇涓俱?
緇撴瀯
Slice 鏀寔鍚湁涓涓垨澶氫釜鏈夊悕縐扮殑鎴愬憳鐨勭粨鏋勶紝榪欎簺鎴愬憳鍙互鍏鋒湁浠繪剰綾誨瀷錛屽寘鎷敤鎴峰畾涔夌殑澶嶆潅綾誨瀷銆備緥濡傦細struct TimeOfDay {
short hour; // 0 - 23
short minute; // 0 - 59
short second; // 0 - 59
};
涓庡湪 C++ 閲屼竴鏍鳳紝榪欎釜瀹氫箟寮曞叆浜嗕竴縐嶅彨浣淭imeOfDay 鐨勬柊綾誨瀷銆傜粨鏋勫畾涔変細褰㈡垚鍚嶅瓧絀洪棿錛屾墍浠ョ粨鏋勬垚鍛樼殑鍚嶅瓧鍙渶鍦ㄥ洿緇曞畠浠殑緇撴瀯閲屾槸鍞竴鐨勩傚湪緇撴瀯鍐呴儴錛屽彧鑳藉嚭鐜版暟鎹垚鍛樺畾涔夛紝榪欎簺瀹氫箟蹇呴』浣跨敤鏈夊悕瀛楃殑綾誨瀷銆備緥濡傦紝浣犱笉鍙兘鍦ㄧ粨鏋勫唴瀹氫箟緇撴瀯錛?struct TwoPoints {
struct Point { //閿欒!
short x;
short y;
};
Point coord1;
Point coord2;
};
榪欎釜瑙勫垯澶т綋涓婇傜敤浜嶴lice錛氱被鍨嬪畾涔変笉鑳藉祵濂楋紙闄や簡妯″潡鏀寔宓屽錛夈傚叾鍘熷洜鏄紝瀵逛簬鏌愪簺鐩爣璇█鑰岃█錛屽祵濂楃殑綾誨瀷瀹氫箟鍙兘浼氶毦浠ュ疄鐜幫紝鑰屼笖錛屽嵆浣胯兘澶熷疄鐜幫紝涔熶細鏋佸ぇ鍦頒嬌浣滅敤鍩熻В鏋愯鍒欏鏉傚寲銆傚浜庡儚Slice 榪欐牱鐨勮鑼冭璦鑰岃█錛屽祵濂楃殑綾誨瀷瀹氫箟騫舵棤蹇呰鈥斺斾綘鎬昏兘浠ヤ笅闈㈢殑鏂瑰紡緙栧啓涓婇潰鐨勫畾涔夛紙榪欑鏂瑰紡鍦ㄩ鏍間笂涔熸洿鍔犳暣媧侊級錛?struct Point {
short x;
short y;
};
struct TwoPoints { // Legal (and cleaner!)
Point coord1;
Point coord2;
}
搴忓垪
搴忓垪鏄彉闀跨殑鍏冪礌鍚戦噺錛?
sequence<Fruit> FruitPlatter;搴忓垪鍙互鏄┖鐨勨斺斾篃灝辨槸璇達紝瀹冨彲浠ヤ笉鍖呭惈鍏冪礌錛涘畠涔熷彲浠ユ寔鏈変換鎰忔暟閲忕殑鍏冪礌錛岀洿鍒拌揪鍒頒綘鐨勫鉤鍙扮殑鍐呭瓨闄愬埗銆? 搴忓垪鍖呭惈鐨勫厓绱犺嚜韜篃鍙互鏄簭鍒椼傝繖縐嶈璁′嬌寰椾綘鑳藉鍒涘緩鍒楄〃鐨勫垪琛細
sequence<FruitPlatter> FruitBanquet;
搴忓垪鍙敤浜庢瀯寤鴻澶氱collection錛屾瘮濡傚悜閲忋佸垪琛ㄣ侀槦鍒椼侀泦鍚堛佸寘錛坆ag錛夛紝鎴栨槸鏍戯紙嬈″簭鏄惁閲嶈瑕佺敱搴旂敤鍐沖畾錛涘鏋滄棤瑙嗘搴忥紝搴忓垪鍏呭綋鐨勫氨鏄泦鍚堝拰鍖咃級銆?
搴忓垪鐨勪竴縐嶇壒鍒殑鐢ㄦ硶宸茬粡鎴愪簡鎯敤鎵嬫硶錛屽嵆鐢ㄥ簭鍒楁潵琛ㄧず鍙夌殑鍊箋備緥濡傦紝鎴戜滑鍙兘鎷ユ湁涓涓狿art 緇撴瀯錛岀敤浜庤褰曞皬姹借濺鐨勯浂浠剁殑璇︾粏璧勬枡銆傝繖涓粨鏋勫彲浠ヨ褰曡繖鏍風殑璧勬枡錛氶浂浠跺悕縐般佹弿榪般侀噸閲忋佷環鏍鹼紝浠ュ強鍏朵粬璇︾粏璧勬枡銆?澶囦歡閫氬父閮芥湁搴忓垪鍙鳳紝鎴戜滑鐢ㄤ竴涓猯ong 鍊艱〃紺恒備絾鏈変簺闆朵歡錛屾瘮濡傚父鐢ㄧ殑铻轟笣閽夛紝甯稿父娌℃湁搴忓垪鍙鳳紝閭d箞鎴戜滑鍦ㄨ灪涓濋拤鐨勫簭鍒楀彿瀛楁閲岃鏀捐繘浠涔堝唴瀹癸紵瑕佸鐞嗚繖縐嶆儏鍐碉紝鏈夎繖鏍蜂竴浜涢夋嫨錛?
鐢ㄤ竴涓爣璁板鹼紝姣斿闆訛紝鏉ユ寚紺衡滄病鏈夊簭鍒楀彿鈥濈殑鎯呭喌銆?
榪欑鏂規硶鏄彲琛岀殑錛屽彧瑕佺‘瀹炴湁鏍囪鍊煎彲鐢ㄣ傚敖綆$湅璧鋒潵涓嶅ぇ鍙兘鏈変漢鎶婇浂鐢ㄤ綔闆朵歡鐨勫簭鍒楀彿錛岃繖騫墮潪鏄笉鍙兘鐨勩傝屼笖錛屽浜庡叾浠栫殑鍊鹼紝姣斿娓╁害鍊鹼紝鍦ㄥ叾綾誨瀷鐨勮寖鍥翠腑鐨勬墍鏈夊奸兘鍙兘鏄悎娉曠殑錛屽洜鑰屾病鏈夋爣璁板煎彲鐢ㄣ?
鎶婂簭鍒楀彿鐨勭被鍨嬩粠long 鍙樻垚string銆?
涓茶嚜宸辨湁鍐呭緩鐨勬爣璁板鹼紝涔熷氨鏄┖涓詫紝鎵浠ユ垜浠彲浠ョ敤絀轟覆鏉ユ寚紺?鈥滄病鏈夊簭鍒楀彿鈥濈殑鎯呭喌銆傝繖涔熸槸鍙鐨勶紝浣嗗嵈浼氳澶у鏁頒漢鎰熷埌涓嶅揩錛氭垜浠笉搴旇涓轟簡寰楀埌涓涓爣璁板鹼紝鑰屾妸鏌愮浜嬬墿鑷劧鐨勬暟鎹被鍨嬪彉鎴恠tring
澧炲姞涓涓寚紺虹鏉ユ寚紺哄簭鍒楀彿鐨勫唴瀹規槸鍚︽湁鏁?
struct Part {
string name;
string description;
// ...
bool serialIsValid; // true if part has serial number
long serialNumber;
};
瀵逛簬澶у鏁頒漢鑰岃█錛岃繖涔熻浜鴻鍘岋紝鑰屼笖鏈緇堣偗瀹氫細璁╀綘閬囧埌楹葷儲錛氳繜鏃╀細鏈夌▼搴忓憳蹇樿鍦ㄤ嬌鐢ㄥ簭鍒楀彿涔嬪墠媯鏌ュ畠鏄惁鏈夋晥錛屼粠鑰屽甫鏉ョ伨闅炬х殑鍚庢灉銆?
鐢ㄥ簭鍒楁潵寤虹珛鍙夊瓧孌?
榪欑鎶鏈嬌鐢ㄤ簡涓嬮潰鐨勬儻鐢ㄦ墜娉曪細
sequence<long> SerialOpt;
struct Part {
string name;
string description;
// ...
SerialOpt serialNumber; // optional: zero or one element
};
鎸夌収鎯緥錛?Opt 鍚庣紑琛ㄧず榪欎釜搴忓垪鏄敤鏉ュ緩绔嬪彲閫夊肩殑銆傚鏋滃簭鍒楁槸絀虹殑錛屽兼樉鐒跺氨涓嶅湪閭i噷錛涘鏋滃畠鍚湁涓涓厓绱狅紝榪欎釜鍏冪礌灝辨槸閭d釜鍊箋傝繖縐嶆柟妗堟槑鏄劇殑緙虹偣鏄紝鏈変漢鍙兘浼氭妸涓嶆涓涓厓绱犳斁鍏ュ簭鍒椼備負鍙夊煎鍔犱竴涓笓鐢ㄧ殑Slice 鎴愬垎鍙互綰犳榪欎釜闂銆備絾鍙夊煎茍闈為偅涔堝父鐢紝涓嶅煎緱涓哄畠澧炲姞涓縐嶄笓闂ㄧ殑璇█鐗規э紙鎴戜滑灝嗙湅鍒幫紝浣犺繕鍙互鐢ㄧ被灞傛鏉ュ緩绔嬪彲閫夊瓧孌碉級銆?
璇嶅吀
璇嶅吀鏄粠閿被鍨嬪埌鍊肩被鍨嬬殑鏄犲皠銆備緥濡傦細
struct Employee {
long number;
string firstName;
string lastName;
};
dictionary<long, Employee> EmployeeMap;
榪欎釜瀹氫箟鍒涘緩涓縐嶅彨浣淓mployeeMap 鐨勮瘝鍏革紝鎶婇泧鍛樺彿鏄犲皠鍒板惈鏈夐泧鍛樿緇嗚祫鏂欑殑緇撴瀯銆備綘鍙互鑷鍐沖畾閿被鍨嬶紙鍦ㄨ繖涓緥瀛愪腑鏄痩ong 綾誨瀷鐨勯泧鍛樺彿錛夋槸鍚︽槸鍊肩被鍨嬶紙鍦ㄨ繖涓緥瀛愪腑鏄疎mployee 緇撴瀯錛夌殑涓閮ㄥ垎鈥斺斿氨Slice 鑰岃█錛屼綘鏃犻渶璁╅敭鎴愪負鍊肩殑涓閮ㄥ垎銆?
璇嶅吀鍙敤浜庡疄鐜扮█鐤忔暟緇勶紝鎴栨槸鍏鋒湁闈炴暣鏁伴敭綾誨瀷鐨勪換浣曠敤浜庢煡鎵劇殑鏁版嵁緇撴瀯銆傚敖綆″惈鏈夐敭錛嶅煎鐨勭粨鏋勭殑搴忓垪鍙敤浜庡垱寤哄悓鏍風殑浜嬬墿錛岃瘝鍏歌鏇翠負閫傚疁錛?
璇嶅吀鏄庣‘鍦拌〃杈句簡璁捐鑰呯殑鎰忓浘錛屼篃灝辨槸錛屾彁渚涗粠鍊肩殑鍩燂紙domain錛夊埌鍊肩殑鑼冨洿錛坮ange錛夌殑鏄犲皠錛堝惈鏈夐敭錛嶅煎鐨勭粨鏋勭殑搴忓垪娌℃湁濡傛鏄庣‘鍦拌〃杈懼悓鏍風殑鎰忓浘錛夈?
鍦ㄧ紪紼嬭璦涓綰э紝搴忓垪琚疄鐜版垚鍚戦噺錛堜篃鍙兘鏄垪琛級錛屼篃灝辨槸璇達紝搴忓垪涓嶅ぇ閫傜敤浜庡唴瀹圭█鐤忕殑鍩燂紝鑰屼笖瑕佸畾浣嶅叿鏈夌壒瀹氬肩殑鍏冪礌錛岄渶瑕佽繘琛岀嚎鎬ф煡鎵俱傝岃瘝鍏歌瀹炵幇鎴愭敮鎸侀珮鏁堟煡鎵劇殑鏁版嵁緇撴瀯錛堥氬父鏄搱甯岃〃鎴栫孩榛戞爲錛夛紝鍏跺鉤鍧囨煡鎵炬椂闂存槸O(log n)錛屾垨鑰呮洿濂姐傝瘝鍏哥殑閿被鍨嬫棤闇涓烘暣鍨嬨備緥濡傦紝鎴戜滑鍙互鐢ㄤ笅闈㈢殑瀹氫箟鏉ョ炕璇戜竴鍛ㄦ瘡涓澶╃殑鍚嶇О錛?
dictionary<string, string> WeekdaysEnglishToGerman;
鏈嶅姟鍣ㄥ疄鐜板彲浠ョ敤閿紞鍊煎Monday鈥揗ontag銆乀uesday鈥揇ienstag錛岀瓑絳夛紝瀵硅繖涓槧灝勮〃榪涜鍒濆鍖栥?
璇嶅吀鐨勫肩被鍨嬪彲浠ユ槸鐢ㄦ埛瀹氫箟鐨勪換浣曠被鍨嬨備絾璇嶅吀鐨勯敭綾誨瀷鍙兘鏄互涓嬬被鍨嬩箣涓錛?
鏁村瀷錛坆yte銆乻hort銆乮nt銆乴ong銆乥ool錛屼互鍙婃灇涓劇被鍨嬶級
string
鍏冪礌綾誨瀷涓烘暣鍨嬫垨string 鐨勫簭鍒?
鏁版嵁鎴愬憳鐨勭被鍨嬪彧鏈夋暣鍨嬫垨string 鐨勭粨鏋?
澶嶆潅鐨勫祵濂楃被鍨嬶紝姣斿宓屽鐨勭粨鏋勬垨璇嶅吀錛屼互鍙婃誕鐐圭被鍨嬶紙float鍜宒ouble錛夛紝涓嶈兘鐢ㄤ綔閿被鍨嬨備箣鎵浠ヤ笉鍏佽浣跨敤澶嶆潅鐨勫祵濂楃被鍨嬶紝鏄洜涓鴻繖浼氫嬌璇嶅吀鐨勮璦鏄犲皠澶嶆潅鍖栵紱涓嶅厑璁鎬嬌鐢ㄦ誕鐐圭被鍨嬶紝鏄洜涓烘誕鐐瑰煎湪璺ㄨ秺鏈哄櫒鐣岀嚎鏃訛紝鍏惰〃紺轟細鍙戠敓鍙樺寲錛屾湁鍙兘瀵艱嚧鎴愰棶棰樼殑鐩哥瓑璇箟銆?
甯擱噺瀹氫箟涓庣洿鎺ラ噺
Slice 鍏佽浣犲畾涔夊父閲忋傚父閲忓畾涔夌殑綾誨瀷蹇呴』鏄互涓嬬被鍨嬩腑鐨勪竴縐嶏細
鏁村瀷錛坆ool銆乥yte銆乻hort銆乮nt銆乴ong錛屾垨鏋氫婦綾誨瀷錛?
float 鎴杁ouble
string
涓嬮潰鏈変竴浜涗緥瀛愶細
const bool AppendByDefault = true;
const byte LowerNibble = 0x0f;
const string Advice = "Don't Panic!";
const short TheAnswer = 42;
const double PI = 3.1416;
enum Fruit { Apple, Pear, Orange };
const Fruit FavoriteFruit = Pear;
鐩存帴閲忥紙literals錛夌殑璇硶涓嶤++ 鍜孞ava 鐨勪竴鏍鳳紙鏈変竴浜涘皬鐨勪緥澶栵級錛?
甯冨皵甯擱噺鍙兘鐢ㄥ叧閿瓧false鍜宼rue鍒濆鍖栵紙浣犱笉鑳界敤0鍜?鏉ヨ〃紺篺alse鍜宼rue錛夈?
鍜孋++ 涓鏍鳳紝浣犲彲浠ョ敤鍗佽繘鍒躲佸叓榪涘埗錛屾垨鍗佸叚榪涘埗鏂瑰紡鏉ユ寚瀹氭暣鏁扮洿鎺ラ噺銆備緥濡傦細
const byte TheAnswer = 42; const byte TheAnswerInOctal = 052; const byte TheAnswerInHex = 0x2A; // or 0x2a
![]() |
娉ㄦ剰 |
|---|---|
| 濡傛灉浣犳妸byte 瑙i噴鎴愭暟瀛椼佽屼笉鏄綅妯″紡錛屼綘鍦ㄤ笉鍚岀殑璇█閲屽彲鑳戒細寰楀埌涓嶅悓鐨勭粨鏋溿備緥濡傦紝鍦–++ 閲岋紝 byte 鏄犲皠鍒癱har錛屽彇鍐充簬鐩爣騫沖彴錛?char 鍙兘鏄湁絎﹀彿鐨勶紝涔熷彲鑳芥槸鏃犵鍙風殑銆?/TD> |
![]() |
娉ㄦ剰 |
|---|---|
鐢ㄤ簬鎸囩ず闀垮父閲忓拰鏃犵鍙峰父閲忕殑鍚庣紑錛圕++ 浣跨敤鐨刲銆丩銆乽銆乁錛夋槸闈炴硶鐨勶細 const long Wrong = 0u; // Syntax error const long WrongToo = 1000000L; // Syntax error |
鏁存暟鐩存帴閲忕殑鍊煎繀欏昏惤鍦ㄥ叾甯擱噺綾誨瀷鐨勮寖鍥村唴錛屽惁鍒欑紪璇戝櫒灝變細鍙戝嚭璇婃柇娑堟伅銆?
嫻偣鐩存帴閲忎嬌鐢ㄧ殑鏄疌++璇硶錛岄櫎浜嗕綘涓嶈兘鐢╨鎴朙鍚庣紑鏉ヨ〃紺烘墿灞曠殑嫻偣甯擱噺錛涗絾鏄紝 f 鍜孎 鏄悎娉曠殑錛堜絾浼氳蹇界暐錛夈備笅闈㈡槸涓浜涗緥瀛愶細
const float P1 = -3.14f; // Integer & fraction, with suffix const float P2 = +3.1e-3; // Integer, fraction, and exponent const float P3 = .1; // Fraction part only const float P4 = 1.; // Integer part only const float P5 = .9E5; // Fraction part and exponent const float P6 = 5e2; // Integer part and exponent
嫻偣鐩存帴閲忓繀欏昏惤鍦ㄥ叾甯擱噺綾誨瀷錛坒loat 鎴杁ouble錛夌殑鑼冨洿鍐咃紱鍚﹀垯緙栬瘧鍣ㄤ細鍙戝嚭璇婃柇璀﹀憡銆?
涓茬洿鎺ラ噺鏀寔涓嶤++ 鐩稿悓鐨勮漿涔夊簭鍒椼備笅闈㈡槸涓浜涗緥瀛愶細
const string AnOrdinaryString = "Hello World!"; const string DoubleQuote = "\""; const string TwoSingleQuotes = "'\'"; // ' and \' are OK const string Newline = "\n"; const string CarriageReturn = "\r"; const string HorizontalTab = "\t"; const string VerticalTab = "\v"; const string FormFeed = "\f"; const string Alert = "\a"; const string Backspace = "\b"; const string QuestionMark = "\?"; const string Backslash = "\\"; 70 Slice 璇█ const string OctalEscape = "\007"; // Same as \a const string HexEscape = "\x07"; // Ditto const string UniversalCharName = "\u03A9"; // Greek Omega 鍜屽湪 C++ 閲屼竴鏍鳳紝鐩擱偦鐨勪覆鐩存帴閲忎細榪炴帴璧鋒潵錛? const string MSG1 = "Hello World!"; const string MSG2 = "Hello" " " "World!"; // Same message /* * Escape sequences are processed before concatenation, * so the string below contains two characters, * '\xa' and 'c'. */ const string S = "\xa" "c";
![]() |
娉ㄦ剰 |
|---|---|
Slice 娌℃湁null 涓茬殑姒傚康 const string nullString = 0; // Illegal!null 涓插湪Slice 閲屾牴鏈笉瀛樺湪錛屽洜姝わ紝鍦↖ce 騫沖彴鐨勪換浣曞湴鏂瑰畠閮戒笉鑳界敤浣滃悎娉曠殑涓插箋傝繖涓鍐沖畾鐨勫師鍥犳槸錛?null 涓插湪璁稿緙栫▼璇█閲屼笉瀛樺湪 |
榪欎竴鑺傚ぇ閮ㄥ垎鍐呭鏁寸悊鑷狪CE涓枃鎵嬪唽錛屽湪榪欓噷鎴戠壒鍒劅璋㈤┈緇磋揪鍚屽織鐨勭炕璇戠粰鎴戜滑鐨勫涔犲甫鏉ヤ簡鏂逛究銆?
璇繪湇鍔$浠g爜
鏂囦歡server.cpp.
#include <Ice/Ice.h>
#include "../print.h"
using namespace std;
using namespace Demo;
//鎯緥錛岀敤鍚庣紑I 琛ㄧず榪欎釜綾誨疄鐜頒竴涓帴鍙?
class PrinterI : public Printer {
public:
virtual void printString(const string& s, const Ice::Current&);
};
/*
鎵撳紑print.h錛岀湅鐪婸rinterI鐖剁被鐨勫畾涔?
namespace Demo {
class Printer : virtual public Ice::Object {
public:
//綰櫄鍑芥暟錛屼笉鑳藉疄渚嬪寲
virtual void printString(const std::string&,
//絎簩涓弬鏁版湁緙虹渷鍊鹼紝瀹炵幇涓彲浠ヤ笉浣跨敤
const Ice::Current&= Ice::Current()) = 0;
};
};
*/
void PrinterI::printString(const string& s, const Ice::Current&)
{
cout << s << endl;
}
int main(int argc, char* argv[])
{
//紼嬪簭鐨勯鍑烘椂鐨勭姸鎬侊紝灝辨槸鍚︽垚鍔熸墽琛?
int status = 0;
//鏉ュ寘鍚獻ce run time 鐨勪富鍙ユ焺 (main handle)
Ice::CommunicatorPtr ic;
try {
//鍒濆鍖朓ce run time 錛坅rgc鍜宎rgv鏄痳un time鍛戒護鍙傛暟錛?
//灝辮繖涓緥瀛愯岃█錛屾湇鍔″櫒涓嶉渶瑕佷換浣曞懡浠よ鍙傛暟錛夈?
//initialize 榪斿洖涓涓寚鍚慖ce::Communicator瀵硅薄鐨勬櫤鑳芥寚閽堬紝
//榪欎釜鎸囬拡鏄疘ce run time 鐨勪富鍙ユ焺銆?
ic = Ice::initialize(argc, argv);
//璋冪敤Communicator 瀹炰緥涓婄殑createObjectAdapterWithEndpoints錛?
//鍒涘緩涓涓璞¢傞厤鍣?姣斿錛氱綉鍗″氨鏄竴縐嶉傞厤鍣?銆?
//鍙傛暟鏄?SimplePrinterAdapter" 錛堥傞厤鍣ㄧ殑鍚嶅瓧錛?
//鍜?default -p 10000"(鐢ㄧ己鐪佸崗璁紙TCP/IP錛?渚﹀惉绔彛10000 鐨勮姹傘?
//鏄劇劧錛屽湪搴旂敤涓‖緙栫爜瀵硅薄鏍囪瘑鍜岀鍙e彿錛屾槸涓縐嶇碂緋曠殑鍋氭硶錛?
//浣嗗畠鐩墠寰堟湁鏁堬紱鎴戜滑灝嗗湪浠ュ悗鐪嬪埌鍦ㄦ灦鏋勪笂鏇村姞鍚堢悊鐨勫仛娉曘?
Ice::ObjectAdapterPtr adapter
= ic->createObjectAdapterWithEndpoints(
"SimplePrinterAdapter", "default -p 10000");
//鏈嶅姟鍣ㄧrun time 宸茬粡鍒濆鍖?瀹炰緥鍖栦竴涓狿rinterI 瀵硅薄錛?
//涓烘垜浠殑Printer 鎺ュ彛鍒涘緩涓涓猻ervant錛坰erv 鏈嶅姟錛?ant浜?鑳屼竴涓嬪崟璇嶏級銆?
Ice::ObjectPtr object = new PrinterI;
//鎴戜滑璋冪敤閫傞厤鍣ㄧ殑add錛屽憡璇夊畠鏈変簡涓涓柊鐨剆ervant 錛?
//浼犵粰add 鐨勫弬鏁版槸鍒氭墠瀹炰緥鍖栫殑servant錛屽啀鍔犱笂涓涓爣璇嗙銆?
//鍦ㄨ繖閲岋紝"SimplePrinter" 涓叉槸servant 鐨勫悕瀛?
//錛堝鏋滄垜浠湁澶氫釜鎵撳嵃鏈猴紝姣忎釜鎵撳嵃鏈洪兘鍙互鏈変笉鍚岀殑鍚嶅瓧錛?
//鏇存紜殑璇存硶鏄紝閮芥湁涓嶅悓鐨勫璞℃爣璇嗭級銆?
adapter->add(object,
Ice::stringToIdentity("SimplePrinter"));
//璋冪敤閫傞厤鍣ㄧ殑activate 鏂規硶嬋媧婚傞厤鍣?
//錛堥傞厤鍣ㄤ竴寮濮嬫槸鍦ㄦ殏鍋滐紙holding錛夌姸鎬佸垱寤虹殑錛?
//榪欑鍋氭硶鍦ㄤ笅闈㈣繖鏍風殑鎯呭喌涓嬪緢鏈夌敤錛?
//鎴戜滑鏈夊涓猻ervant錛屽畠浠叡浜悓涓涓傞厤鍣紝
//鑰屽湪鎵鏈塻ervant瀹炰緥鍖栦箣鍓嶆垜浠笉鎯沖鐞嗚姹傦級銆?
//涓鏃﹂傞厤鍣ㄨ嬋媧伙紝鏈嶅姟鍣ㄥ氨浼氬紑濮嬪鐞嗘潵鑷鎴風殑璇鋒眰銆?
adapter->activate();
//鏈鍚庯紝鎴戜滑璋冪敤waitForShutdown銆?
//榪欎釜鏂規硶鎸傝搗鍙戝嚭璋冪敤鐨勭嚎紼嬬洿鍒版湇鍔″櫒瀹炵幇緇堟
//鈥斺旀垨鑰呮槸閫氳繃鍙戝嚭涓涓皟鐢ㄥ叧闂璻un time錛?
ic->waitForShutdown();
}
catch (const Ice::Exception& e) {
cerr << e << endl;
status = 1;
} catch (const char* msg) {
cerr << msg << endl;
status = 1;
}
if (ic) {
try {
//蹇呴』璋冪敤Communicator::destroy緇撴潫Ice run time銆?
//destroy 浼氱瓑寰呬換浣曡繕鍦ㄨ繍琛岀殑鎿嶄綔璋冪敤瀹屾垚銆?
//姝ゅ錛?destroy 榪樹細紜繚浠諱綍榪樻湭瀹屾垚鐨勭嚎紼嬮兘寰椾互姹囧悎錛坖oined錛夛紝
//騫舵敹鍥炰竴浜涙搷浣滅郴緇熻祫婧愶紝姣斿鏂囦歡鎻忚堪絎﹀拰鍐呭瓨銆?
//鍐充笉瑕佽浣犵殑main 鍑芥暟涓嶈皟鐢╠estroy 灝辯粓姝?
//鍚﹀垯錛屽悗鏋滄棤娉曟兂璞°?
ic->destroy();
} catch (const Ice::Exception& e) {
cerr << e << endl;
status = 1;
}
}
return status;
}
娉ㄦ剰錛屽敖綆′互涓婄殑浠g爜涓嶇畻灝戯紝浣嗗畠浠鎵鏈夌殑鏈嶅姟鍣ㄩ兘鏄竴鏍風殑銆備綘鍙互鎶婅繖浜涗唬鐮佹斁鍦ㄤ竴涓緟鍔╃被閲岋紝鐒跺悗灝辨棤闇鍐嶄負瀹冭垂蹇冧簡錛圛ce 鎻愪緵浜嗚繖鏍風殑杈呭姪綾伙紝鍙綔Ice::Application錛屽弬瑙?10.3.1 鑺傦級 銆傚氨瀹為檯鐨勫簲鐢ㄤ唬鐮佽岃█錛屾湇鍔″櫒鍙湁鍑犺浠g爜錛氬叚琛屼唬鐮佸畾涔塒rinterI 綾伙紝鍐嶅姞涓婁笁2 琛屼唬鐮佸疄渚嬪寲涓涓狿rinterI 瀵硅薄錛屽茍鍚戝璞¢傞厤鍣ㄦ敞鍐屽畠銆?
璇誨鎴風浠g爜
鏂囦歡client.cpp.
#include <Ice/Ice.h>
#include "..\print.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);
//stringToProxy 榪斿洖鐨勪唬鐞嗭紙Proxy錛夌被鍨嬫槸Ice::ObjectPrx錛?
//榪欑綾誨瀷浣嶄簬鎺ュ彛鍜岀被鐨勭戶鎵挎爲鐨勬牴閮紙鎺ュ彛鐨勫熀綾伙級銆?
Ice::ObjectPrx base
=ic->stringToProxy( "SimplePrinter:default -p 10000");
//浣嗚瀹為檯瑕佷笌鎴戜滑鐨勬墦鍗版満浜よ皥錛?
//鎴戜滑闇瑕佺殑鏄疨rinter 鎺ュ彛銆佷笉鏄疧bject 鎺ュ彛鐨勪唬鐞嗐?
//涓烘錛岄渶瑕佽皟鐢≒rinterPrx::checkedCast 榪涜鍚戜笅杞崲錛堝悜涓嬭漿鍨嬶級銆?
//榪欎釜鏂規硶浼氬彂閫佷竴鏉℃秷鎭粰鏈嶅姟鍣紝
//璇㈤棶鈥滆繖鏄疨rinter 鎺ュ彛鐨勪唬鐞嗗悧錛熲?
//濡傛灉鍥炵瓟鈥滄槸鈥濓紝灝變細榪斿洖Printer 鐨勪竴涓唬鐞嗭紱
//濡傛灉浠g悊浠h〃鐨勬槸鍏朵粬綾誨瀷鐨勬帴鍙o紝榪斿洖涓涓┖浠g悊
PrinterPrx printer = PrinterPrx::checkedCast(base);
//嫻嬭瘯鍚戜笅杞瀷鏄惁鎴愬姛錛岃嫢涓嶆垚鍔燂紝灝辨姏鍑哄嚭閿欐秷鎭茍緇堟瀹㈡埛銆?
if (!printer) throw "Invalid proxy";
//鐜板湪錛屾垜浠湪鎴戜滑鐨勫湴鍧絀洪棿閲屾湁浜嗕竴涓縺媧葷殑浠g悊錛?
//鍙互璋冪敤printString 鏂規硶錛?
//鎶婁韓瑾夊凡涔呯殑 "Hello World!" 涓蹭紶緇欏畠銆?
//鏈嶅姟鍣ㄤ細鍦ㄥ畠鐨勭粓绔笂鎵撳嵃榪欎釜涓層?
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;
}
濡傛灉鍑虹幇浠諱綍閿欒錛屽鎴蜂細鎵撳嵃涓鏉″嚭閿欐秷鎭備緥濡傦紝濡傛灉鎴戜滑娌℃湁鍏堝惎鍔ㄦ湇鍔″櫒灝辮繍琛屽鎴鳳紝鎴戜滑浼氬緱鍒幫細
Network.cpp:471: Ice::ConnectFailedException: connect failed: Connection refused
(鐢變簬windows涓嬬殑鍛戒護琛岀獥鍙e湪鍑洪敊鍚庝細涓闂氨娑堝け錛屼笉榪囨垜浠彲浠ュ湪client.cpp鐨刴ain鍑芥暟鐨剅eturn status;涔嬪墠鍔犱笂system("PAUSE");鐒跺悗鍐嶅湪VS2003.net涓妸client璁劇疆涓哄惎鍔ㄩ」鐩紝閲嶆柊緙栬瘧錛岃繍琛屻侽K錛屽彲浠ョ湅鍒扮粨鏋滀簡銆?
鎸夌収鏌愪漢鐨勮娉曪細璺ㄥ鉤鍙扮殑C錛嬶紜緗戠粶緙栫▼ICE鎵嶆槸鐜嬮亾銆備簬鏄紝鎴戝涔營CE銆?
ICE鎵嶅嚭鏉ヤ袱騫達紝鏄滀竴縐嶇幇浠g殑闈㈠悜瀵硅薄涓棿浠訛紝鍙敤浜庢浛浠e儚CORBA鎴朇OM/DCOM/COM+榪欐牱鐨勪腑闂翠歡銆傚湪鏄撲簬瀛︿範鐨勫悓鏃訛紝瀹冧負鍚勭鏈夌潃鑻涘埢鐨勬妧鏈姹傜殑搴旂敤鎻愪緵浜嗗己澶х殑緗戠粶鍩虹璁炬柦銆傗滻ce 3.0 宸插疄鐜板C++, Java, Python, PHP, C# 鍙?Visual Basic 鐨勬敮鎸併?
榪欓噷鎴戝氨涓嶅璇翠簡,澶у鍙互鍙傝冭繖綃囨枃绔狅細銆婂弽鍙涗箣鍐幫細Internet Communications Engine 銆嬨傚ぇ瀹跺彲浠ヤ笅杞界殑ICE鐨勫畼鏂瑰弬鑰冩墜鍐岋紝鏈変腑鏂囩増錛屼笉榪囨槸1.3.0鐗? 鑻辨枃鐨勬槸3.0鐗堛?
ICE鏄紑婧愮殑錛屽ぇ瀹跺彲浠ヤ粠婧愪唬鐮佸紑濮嬬紪璇戯紝涓嶈繃杈冨鏉傦紝騫稿ソ鏈塨inary鐗堟湰錛屾瘮濡傛垜灝辨槸涓嬭澆鐨刅S2003.NET鐨勫畨瑁呭寘銆傚畨瑁呭畬鎴愪箣鍚庢寜鐓у畨瑁呯洰褰曚笅鐨凴eadme瀵笽DE榪涜涓涓嬮厤緗紝姣斿VC7.1灝辨槸鎶奿ce鐨刬nclude鍔犲叆VC7.1鐨勫紩鐢ㄦ枃浠剁洰褰?鎶奿ce鐨刲ib鐩綍鍔犲叆VC7.1鐨勫簱鏂囦歡鐩綍銆傜劧鍚庡啀鎶婂畨瑁呯洰褰曚笅鐨刡in鏂囦歡澶規坊鍔犲埌緋葷粺鐨勭幆澧冨彉閲廝ath涓紝鏈鍚庯紝鎶奲in鏂囦歡澶逛笅鐨勬墍鏈塂LL鏂囦歡閮紺opy鍒癢indows瀹夎鐩綍涓嬬殑System32鏂囦歡澶逛笅錛坵in98涓嬫槸System鏂囦歡澶癸紵錛夈?
ICE鑷畾涔変簡涓縐峉LICE璇█錛岀洰鐨勬槸瀹氫箟鎺ュ彛錛屼綔鐢ㄤ富瑕佸簲璇ユ槸淇濇寔瀵硅薄璋冪敤鎴栬呮暟鎹紶杈撴椂鐨勮璦鏃犲叧鎬с?
寮鍙戜竴涓狪CE搴旂敤紼嬪簭鍙互鍒嗕負涓夋:
鍐欎竴涓猄lice瀹氫箟, 騫朵笖緙栬瘧瀹?/P>
鍐欐湇鍔$, 騫剁紪璇戝畠
鍐欏鎴風, 騫剁紪璇戝畠
OK錛屽啓涓涓皬紼嬪簭錛屽疄鐜板鎴峰彂閫佽鎵撳嵃鐨勬枃鏈粰鏈嶅姟鍣紝鍐嶇敱鏈嶅姟鍣ㄦ妸鏂囨湰鍙戠粰鎵撳嵃鏈猴紙榪欓噷鎴戜滑鐢ㄥ睆騫曟樉紺烘浛浠o級,榪欓噷瀵逛唬鐮佽В璇昏瑙佷笅涓绔狅紝榪欓噷涓嶅璇淬?
鍐欎竴涓猄lice瀹氫箟, 騫朵笖緙栬瘧瀹冿細
鏂囦歡Printer.ice.
module Demo {
interface Printer {
void printString(string s);
};
};
榪欎釜鏂囦歡寰堢畝鍗? 浣嗛渶瑕佹敞鎰? 鍦ㄥ尯鍒嗗ぇ灝忓啓鐨勭郴緇熶笂, 鎵╁睍鍚嶄竴瀹氭槸灝忓啓.
緙栬瘧涔熷緢綆鍗?棣栧厛紜浣犲凡灝嗕綘鐨刡in鐩綍鍔犲埌緋葷粺鐨勭幆澧冨彉閲廝ath涓?鐒跺悗鎶婁笂闈㈣繖涓墖鏂繚瀛樻垚Printer.ice, 鏈鍚庢墽琛宻lice2cpp Printer.ice, 鎵ц鍚庣殑緇撴灉搴旇鏄嚜鍔ㄧ敓鎴愪簡printer.h鍜宲rinter.cpp.
鍐欐湇鍔$, 騫剁紪璇戝畠
鏂囦歡server.cpp.
#include <Ice/Ice.h>
#include "../print.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,
Ice::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;
}
浠S2003鐨勯厤緗負渚?
鎶奿ce鐨刬nclude鍔犲叆VC7.1鐨勫紩鐢ㄦ枃浠剁洰褰?鎶奿ce鐨刲ib鐩綍鍔犲叆VC7.1鐨勫簱鏂囦歡鐩綍銆傜劧鍚庡啀鎶婂畨瑁呯洰褰曚笅鐨刡in鏂囦歡澶規坊鍔犲埌緋葷粺鐨勭幆澧冨彉閲廝ath涓紝鏈鍚庯紝鎶奲in鏂囦歡澶逛笅鐨勬墍鏈塂LL鏂囦歡閮紺opy鍒癢indows瀹夎鐩綍涓嬬殑System32鏂囦歡澶逛笅錛坵in98涓嬫槸System鏂囦歡澶癸紵錛夛紙褰撶劧錛孌LL鏂囦歡鐨勯棶棰樹篃鍙互閫氳繃淇敼鐜鍙橀噺鏉ヨВ鍐籌紝涓嶈繃鏄偅涓彉閲忓憿錛焀ho can tell me?錛?
鏂板緩涓涓狢錛嬶紜鐨刉in32鐨勫懡浠ゅ彴鎺у埗紼嬪簭錛屽茍涓旇緗負絀洪」鐩紝 鎶妔erver.cpp, printer.cpp鍜宲rinter.h鍔犲叆榪欎釜欏圭洰錛坧rinter.cpp鍜宲rinter.h鏀懼湪欏圭洰鐨勭洰褰曠殑澶栦竴灞傜洰褰曪級
欏圭洰錛嶃嬪睘鎬э紞銆婥/C++ -銆嬩唬鐮佺敓鎴愶紞銆嬭繍琛屾椂搴擄紞銆?MD(realse鐗?鎴?MDd(debug鐗堬級
欏圭洰錛嶃嬮厤緗睘鎬?銆婥/C++-銆嬭璦-銆嬪惎鐢ㄨ繍琛屾椂綾誨瀷淇℃伅/GR 寮鍚?
璁劇疆錛氶」鐩紞銆嬪睘鎬э紞銆嬮摼鎺ュ櫒錛嶃嬭緭鍏ワ紞銆嬪姞鍏ced.lib iceutild.lib錛屾澶勪竴瀹氳鎶妑ealse搴撳拰debug搴撳垎娓? debug搴撳悗鏈変釜d
淇敼printer.cpp涓殑#include <printer.h>涓?include "printer.h"
OK,緙栬瘧
鍐欏鎴風錛屽茍緙栬瘧瀹?/P>
鏂囦歡client.cpp.
#include <Ice/Ice.h>
#include "..\print.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;
}
娣誨姞涓涓柊欏圭洰鍒板綋鍓嶈В鍐蟲柟妗堬紝鎸夌収涓婇潰鐨勬柟娉曪紝瀵筩lient鍐嶄竴嬈¤繘琛岃緗?/P>
鍦ㄨВ鍐蟲柟妗堢鐞嗗櫒鐨勮В鍐蟲柟妗堜笂鐐瑰嚮鍙抽敭錛岄夋嫨鎵圭敓鎴怐ebug鐗堟湰錛岀劧鍒扮敤璧勬簮綆$悊鍣ㄥ埌涓や釜瑙e喅鏂規鐨勭洰褰曚笅鐨凞ebug鏂囦歡澶逛腑鎵ц鐢熶駭鐨勫彲鎵ц鏂囦歡銆傚厛榪愯server.exe, 鐒跺悗榪愯client.exe, 鍝堝搱, 鏄笉鏄湪server.exe鐨勭獥鍙i噷鍑虹幇浜咹ello World!錛堣繍琛屼竴嬈lient.exe錛屽嚭鐜頒竴鏉★級
鏂囩珷婧愬湴鍧:http://enjoylanguage.sourceforge.net/%5Bxhtml_chunk_sourceForge%5D/ch02.html