﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-牵牛散步-随笔分类-ICE FOR VC++6.0</title><link>http://www.cppblog.com/klsmlzm/category/506.html</link><description>暂时无</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 07:09:58 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 07:09:58 GMT</pubDate><ttl>60</ttl><item><title>在VC++6.0 SP6 下配置ICE工程[DEBUG版本]--config ice project(debug) for vc++6.0 with sp6</title><link>http://www.cppblog.com/klsmlzm/archive/2006/09/18/12686.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Mon, 18 Sep 2006 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2006/09/18/12686.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/12686.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2006/09/18/12686.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/12686.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/12686.html</trackback:ping><description><![CDATA[
		<p>刚学习ICE时,在VC++6.0下配置ICE工程简直是个恶梦,死活配不来DEBUG版本的,开发全在RELEASE版本下.很痛苦.最近研究了下,成功的配置成功了,方法如下:<br /><br />1.Project Settings &gt;&gt; C/C++(Tab) &gt;&gt; Category:Code Generation &gt;&gt; User run-time library:Debug Multithreaded DLL<br /><br />2.Project Settings &gt;&gt; C/C++(Tab) &gt;&gt; Category:Preprocessor &gt;&gt; Additional include directories:(在此项中填入一个点".",表示根目录)<br /><br />3.Project Settings &gt;&gt; C/C++(Tab) &gt;&gt; Category:C++ Language &gt;&gt; 勾选"Enable Run-Time Type Information(RTTI)"项<br /><br />4.Project Settings &gt;&gt; Link(Tab) &gt;&gt; Category:General&gt;&gt;在"Object/library modules:"框中的未首加入两个包"iced.lib"和"iceutild.lib"<br /><br /><br />这样,整个ICE工程的DEBUG版本就建立完成了.<br />以上方法在 VC++6.0 SP6 和 ICE3.0.0 下通过</p>
<img src ="http://www.cppblog.com/klsmlzm/aggbug/12686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2006-09-18 17:58 <a href="http://www.cppblog.com/klsmlzm/archive/2006/09/18/12686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]</title><link>http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Fri, 21 Apr 2006 07:06:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/6026.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/6026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/6026.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000">对动态链接库的概念其实还很模糊,自己的理解是:<br />把一些常用的代码,如函数,类等,编译成一个"包"即DLL(WINDOWS下)或者SO(LINUX下)文件,<br />然后供其它程序使用时直接调用里面封闭的函数即可,实现的代码的重用,也节省了<br />硬盘空间(这点可能是次要的吧).在WIDOWS下利用VC++可方便的生成DLL,在LINUX下则需要通过<br />各种编译命令来实现,对于像我这种菜鸟级程序员来说是个不小的挑战.<br />下面用个简单的例子来说明生成一个.SO文件和如何使用它:<br />1.我这有几个文件:<br />ConfigMap.cpp ConfigMap.h (读配置文件类)GetWinState.cpp GetWinState.h(ICE接口文件,由SLICE生成) GetWinSysState.cpp GetWinSysState.h (远程接口实现文件)<br />SocDbInfo.cpp(封装的一个类,用于调用ICE接口实现相关操作)<br />说明:此程序是为了获得远程主机(WINDOWS)上一些系统信息,比如:CPU占用率,硬盘使用情况,数据<br />库连接状态,内存使用情况等.<br />我想利用这些文件生成动态链接库.SO,主要是调用SocDbInfo.cpp里的类.然后可以拿到任意一个系统中(LINUX)去用.<br />2.开始编译:$c++ -I. -I$ICE_HOME/include -c *.cpp<br />编译后生成连接文件(我一直这样叫,可能不对哈),即以.O结尾的<br />3.生成动态链接库:$c++ -shared -o libMyApp.so *.o -L$ICE_HOME/lib -lIce -lIceUtil<br />这样就生成了libMyApp.so文件,即我们所要的<br />4.使用动态链接库:<br />新建两个文件Demo.cpp Demo.h(使用libMyApp.so提供的一些函数),<br />在Demo.h中声明了libMyApp.so中提供的函数和结构体,<br />Demo.h:代码如下:<br /><br />struct MemoryInf<br />{<br /> int TotalMem;//×ÜÄÚ´æ´óÐ¡<br /> int ValidMem;//¿ÉÊ¹ÓÃÄÚ´æ´óÐ¡<br /> int VirtualMem;//ÐéÄâÄÚ´æ´óÐ¡<br />};<br />struct DiskInf<br />{<br /> int TotalSpace;//Ó²ÅÌ´óÐ¡<br /> int FreeSpace;//Ê£Óà¿Õ¼ä´óÐ¡<br />};<br />struct DbInf<br />{<br /> int DbStat;//Êý¾Ý¿â×´Ì¬:"0"±íÊ¾Êý¾Ý¿â´¦ÔÚ¹Ø±Õ×´Ì¬,"1"±íÊ¾Êý¾Ý¿âÕý³£´ò¿ª,"2"±íÊ¾Êý¾Ý¿â´¦ÔÚ¹ÒÆð×´Ì¬<br /> int DbConnNum;//Êý¾Ý¿âÁ¬½ÓÊý<br />};<br />bool Inital( char *ResHostIP);//³õÊ¼»¯Í¨ÐÅÆ÷<br />bool DesIceCom();//Ïú»ÙICEÍ¨ÐÅÆ÷<br />MemoryInf GetMemInf();//µÃµ½ÄÚ´æÐÅÏ¢<br />int GetCpuInf();//µÃµ½CPUÕ¼ÓÃÂÊ<br />DbInf GetDbStat();//µÃµ½Êý¾Ý¿âÐÅÏ¢<br />DiskInf GetDiskStat();//µÃµ½Ó²ÅÌÐÅÏ¢</font>
		</p>
		<font color="#000000">
				<p>
						<br />
						<br />注:乱码是由于我的LINUX下不支持中文哈,是注释不用管它<br />Demo.cpp:代码如下:<br />#include &lt;string.h&gt;<br />#include &lt;iostream&gt;<br />#include "Demo.h"</p>
				<p>
						<br />int main( int argc , char* argv[])<br />{</p>
				<p> MemoryInf mymem;<br /> DiskInf mydisk;<br /> DbInf mydb;<br /> Inital( argv[1]);<br /> mydisk = GetDiskStat();<br /> mymem = GetMemInf();<br /> mydb = GetDbStat();<br /> printf("disk total space:%d\n",mydisk.TotalSpace);<br /> printf("disk FreeSpace space:%d\n",mydisk.FreeSpace);<br /> printf("Memory TotalMem:%d\n",mymem.TotalMem);<br /> printf("ValidMem:%d\n",mymem.ValidMem);<br /> printf("VirtualMem:%d\n",mymem.VirtualMem);<br /> printf("DbConnNum:%d\n",mydb.DbConnNum);<br /> printf("DbStat:%d\n",mydb.DbStat);<br /> printf("cpu:%d\n",GetCpuInf());<br /> DesIceCom();<br /> return 1;<br />}<br /><br /><br />5.编译文件生成可执行程序:<br />用以下命令:<br />$c++ -lMyApp -o Demo Demo.cpp<br />说明:-lMyApp参数表示,用动态链接库libMyApp.so一起进行编译,对了libMyApp.so最好放在/usr/lib目录下哈<br />如不出意外刚会生成名为Demo的可执行文件<br /><br /></p>
		</font>
<img src ="http://www.cppblog.com/klsmlzm/aggbug/6026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2006-04-21 15:06 <a href="http://www.cppblog.com/klsmlzm/archive/2006/04/21/6026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>std::string 与 char 类型的相互转换</title><link>http://www.cppblog.com/klsmlzm/archive/2005/12/15/1794.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Thu, 15 Dec 2005 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2005/12/15/1794.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/1794.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2005/12/15/1794.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/1794.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/1794.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;//string 转换为 char 型<BR>&nbsp;&nbsp;char* str = strdup ( SendData.strSql.c_str() );<BR>&nbsp;&nbsp;cout &lt;&lt; str &lt;&lt; endl;</P>
<P>&nbsp;&nbsp;char 转换为 string 型<BR>&nbsp;&nbsp;char* str = "char 转换为 string 型";<BR>&nbsp;&nbsp;SendData.strSql = str;<BR><BR>//SendData.strSql 为std::string型</P><img src ="http://www.cppblog.com/klsmlzm/aggbug/1794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2005-12-15 15:27 <a href="http://www.cppblog.com/klsmlzm/archive/2005/12/15/1794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ICE客户端中如何定位服务器端的位置(即如何寻找代理)</title><link>http://www.cppblog.com/klsmlzm/archive/2005/12/09/1651.html</link><dc:creator>牵牛散步</dc:creator><author>牵牛散步</author><pubDate>Fri, 09 Dec 2005 12:10:00 GMT</pubDate><guid>http://www.cppblog.com/klsmlzm/archive/2005/12/09/1651.html</guid><wfw:comment>http://www.cppblog.com/klsmlzm/comments/1651.html</wfw:comment><comments>http://www.cppblog.com/klsmlzm/archive/2005/12/09/1651.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/klsmlzm/comments/commentRss/1651.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/klsmlzm/services/trackbacks/1651.html</trackback:ping><description><![CDATA[<P>最近开始学习ICE,头有点大,900多页的文档看了五百多页还不知CLIENT如何定位SERVER的位置,郁闷的很...昨天毛了直接看文档的最后几页..我晕原来在这里给阐述了...差不多想撞墙</P>
<P>以下是中文文档中关于端点的描述:</P>
<P>D.2 端点<BR>纲要<BR>endpoint : endpoint<BR>描述<BR>端点列表由一个或多个用冒号(:) 分隔的端点组成。端点的格式如下所<BR>示： protocol option。所支持的协议有tcp、udp、ssl，以及<BR>default。如果使用了default，它会被Ice.Default.Protocol 属性的值替<BR>代。如果端点的格式有问题，或者指定了未知的协议，应用会收到<BR>Ice::EndpointParseException。<BR>只有安装了IceSSL 插件，才能使用ssl 协议。<BR>各个协议及其所支持的选项将在下面描述。<BR>TCP 端点<BR>纲要<BR>tcp -h host -p port -t timeout -z<BR>描述<BR>tcp 端点支持以下选项：<BR>选项描述客户语义服务器语义<BR>-h host 指定端点的主机名<BR>或IP 地址。如果<BR>没有指定，将使用<BR>Ice.Default.Hos<BR>t 的值。<BR>确定要连接到的主<BR>机名或IP 地址。<BR>确定对象适配器用<BR>于侦听连接的网络<BR>接口，以及在适配<BR>器所创建的代理中<BR>向外公布的主机<BR>名。<BR>-p port 指定端点的端口<BR>号。<BR>确定要连接到的端<BR>口( 必须指定)。<BR>如果没有指定这个<BR>选项，或是port 为<BR>零，端口将由操作<BR>系统选择。<BR>932 代理与端点</P>
<P><BR>以上是基于TCP协议的,关于UDP,SSL协议的也差不多<BR><BR>我在我的聊天程序中连接LAN中一台服务器的代码:<BR>#include &lt;Ice/Ice.h&gt;<BR>#include &lt;Printer.h&gt;</P>
<P>using namespace std;<BR>using namespace Demo;</P>
<P><BR>int main(int argc, char * argv[])<BR>{<BR>&nbsp;&nbsp;&nbsp; int status = 0;<BR>&nbsp;char strtemp[100];//聊天内容<BR>&nbsp;char clientname[20];//客户名<BR>&nbsp;char chattmp[130];<BR>&nbsp;&nbsp;&nbsp; Ice::CommunicatorPtr ic;<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;ic = Ice::initialize(argc, argv);<BR>/*连接服务器:SimplePrinter16所申请的代理ID,default即为使用默认的协议TCP,-h 192.168.1.16 为服务端所在LAN中的IP地址,-p 9600为端口号*/<BR>&nbsp;&nbsp;Ice::ObjectPrx base = ic-&gt;stringToProxy("SimplePrinter16:default -h 192.168.1.16 -p 9600");<BR>&nbsp;&nbsp;//创建一个Printer的代理(Printer即为客户端与服务器端的接口)，利用checkedCast(base)检查代理是否存在<BR>&nbsp;&nbsp;PrinterPrx printer = PrinterPrx::checkedCast(base);<BR>&nbsp;&nbsp;if (!printer)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;throw "Invalid proxy";//代理不存在<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("请输入您的ID:");<BR>&nbsp;&nbsp;&nbsp;cin &gt;&gt; clientname;<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;while ( 1 )<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;cin &gt;&gt; strtemp;//输入聊天内容<BR>&nbsp;&nbsp;&nbsp;if ( strcmp( strtemp,"q") == 0 )<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;//退出聊天<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;//strcat( chattmp, clientname );<BR>&nbsp;&nbsp;&nbsp;strcpy( chattmp, clientname );<BR>&nbsp;&nbsp;&nbsp;strcat( chattmp, " say: " );<BR>&nbsp;&nbsp;&nbsp;strcat( chattmp, strtemp );<BR>&nbsp;&nbsp;&nbsp;printer-&gt;printString(chattmp);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;//发给服务器的退出消息<BR>&nbsp;&nbsp;printer-&gt;printString(clientname);<BR>&nbsp;&nbsp;printer-&gt;printString("已退出!");<BR>&nbsp;&nbsp;cout &lt;&lt; "成功退出!" &lt;&lt; endl;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; } catch (const Ice::Exception &amp; ex) {<BR>&nbsp;&nbsp;cerr &lt;&lt; ex &lt;&lt; endl;<BR>&nbsp;&nbsp;status = 1;<BR>&nbsp;&nbsp;&nbsp; } catch (const char * msg) {<BR>&nbsp;&nbsp;cerr &lt;&lt; msg &lt;&lt; endl;<BR>&nbsp;&nbsp;status = 1;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; if (ic) {<BR>&nbsp;&nbsp;try {<BR>&nbsp;&nbsp;&nbsp;ic-&gt;destroy();<BR>&nbsp;&nbsp;} catch (const Ice::Exception &amp; ex) {<BR>&nbsp;&nbsp;&nbsp;cerr &lt;&lt; ex &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;status = 1;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return status;<BR>}<BR><BR></P><img src ="http://www.cppblog.com/klsmlzm/aggbug/1651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/klsmlzm/" target="_blank">牵牛散步</a> 2005-12-09 20:10 <a href="http://www.cppblog.com/klsmlzm/archive/2005/12/09/1651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>