﻿<?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++博客-woaidongmao-随笔分类-其他经验</title><link>http://www.cppblog.com/woaidongmao/category/6008.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 05:22:54 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 05:22:54 GMT</pubDate><ttl>60</ttl><item><title>让普通QQ号也能克隆QQ好友</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/20/50506.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Tue, 20 May 2008 04:41:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/20/50506.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/50506.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/20/50506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/50506.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/50506.html</trackback:ping><description><![CDATA[<p><b>NO.1-普通QQ号照样可以克隆QQ好友</b><br>　　相信大家手头都有几个备用的QQ号吧，一般都是在当初QQ免费注册的时候弄来的，但是有时候因为某些原因，突然要把一个QQ上的好友完全克隆到另外一个QQ上面，这个“庞大工程”我想一般人是没有时间，也没有精力去完成它的。您先不用着急羡慕QQ会员的克隆好友功能，我们自己动手，照样可以完成这个“不可能的任务”! <br>　　首先，我们要将自己原来的号和新号重新登陆一遍,然后在以旧QQ号命名的文件夹中找到user.db数据库文件，然后复制它，接着再到新号的文件夹里粘贴覆盖原文件，然后再登陆新号，你会发现，好友都在上面了,不过他们是永远不会上线的。先不要着急，接下来就是我们最关键的一步了，打开好友管理器，在好友列表里选中自己想要加的人，选择多人的话要按着ctrl键, 选好后再把刚才选中的好友全拉到陌生人一栏里，看到这里，您可能要问，为什么要删除他们啊?因为这是让他们复活的关键一步，在跳出的对话框里全部选确定，然后到陌生人一栏中，像刚才一样选中你的好友,拉到好友列表里，复活成功，不过接下来的事情可就要让你忙一阵子了，这回要跳出好多要求好友确认的对话框，您就慢慢点着吧，虽然这个办法有点笨拙，但是目的还是达到了。 <br><b>NO.2-QQ中免费发手机短信</b><br>　　在正常情况下，你可以申请QQ号码和手机绑定在一起，这样便能通过QQ发送短信，而费用从你的手机费中扣除。但如果你的手机由于欠费停机，导致手机号码被注销(当然也可以主动注销手机号)，由于腾讯的数据没有和电信部门的数据同步，导致QQ傻不乎乎的并不知道你的手机已经被注销，此时您仍旧可以使用那个以前绑定的QQ给别的手机发短信，而费用却不用你掏。所以只要有人把手机和自己的QQ号码绑定在一起，然后注销手机号码，就可以使用该QQ号免费发送手机短信!而且发送的速度奇快! <br><b>NO.3-隐藏我的QQ，让它无影无踪!</b><br>　　在单位上班的时候，由于很无聊所以想上网和朋友聊天，但是却怕被老板发现，怎么办呢?虽然QQ的主界面在默认的设置中可以自动隐藏，但是任务栏中的QQ图标呢?想把它藏起来倒也不难，方法是：右击系统托盘中的QQ图标，选择弹出菜单中的“系统参数”，将“参数设置”中的“在任务栏显示图标”前面的“√”去掉。任务栏中的图标是不是已经没有了呢?如果同时将“总在最前面”取消选中，那隐蔽性就更强了。自己想打开的时候怎么办?用快捷键“Ctrl+Alt+Z”呀，或者是自己设置一个快捷键。 <br><b>NO.4-使对方的QQ黑名单失效</b><br>　　有些时候，由于自己不小心做错了一件事，或是错说了一句话，导致对方因为“一时不满”将你删除，或是拖到了黑名单中，这样我们就无法再和对方说话了。在此，告诉大家一个让黑名单失效的方法。用这个方法，就算他把我们加入到“黑名单”中也没有用，我们还可以重新把对方加入到自己的好友名单，仍然能够不断地给对方发送信息。原理说白了也很简单，就是利用了QQ的一个Bug，这个Bug出现在系统通过认证这一环节上。 <br>　　下面详细说一下。如果对方将对你拖入到了“黑名单”中，这样我们就无法再和你的好友聊天了。但如果当初他向你发送过加入请求，那我们只要在“系统消息”中找到他向你发送请求的那条命令，按“通过验证”按钮，就可以再次把你加回到他的QQ好友名单中，这样即便他在好友名单中将你删除，或是把你加入到“黑名单”里，这都没有关系，我们可以通过这个方法重新回到他的好友名单中。想要将我拒之门外是不可能的。</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/50506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-20 12:41 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/20/50506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML的五种用途</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/19/50444.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 19 May 2008 14:51:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/19/50444.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/50444.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/19/50444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/50444.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/50444.html</trackback:ping><description><![CDATA[<p></p> <p class="MsoNormal" style="background: #eef9fc; word-break: break-all; text-align: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="left"><span style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">在很多研讨会和培训班上我遇到过许多人，他们还不明白为什么要使用<span lang="EN-US">XML</span>也不知道如何<span lang="EN-US">&nbsp;<br></span>在他们的应用中使用<span lang="EN-US">XML</span>。一些来自诸如<span lang="EN-US">Gartner</span>公司的报告建议说，商业公司不能再做<span lang="EN-US">&nbsp;<br></span>局外人了，不能对<span lang="EN-US">XML</span>置之不理。如果你还不清楚<span lang="EN-US">XML</span>到底有什么好处的话，你并不是唯<span lang="EN-US">&nbsp;<br></span>一的人。<span lang="EN-US">&nbsp;<br></span>我决定把与人们和媒体关于<span lang="EN-US">XML</span>话题的交谈整理成文，列出<span lang="EN-US">XML</span>在应用中的五个最令人喜<span lang="EN-US">&nbsp;<br></span>爱的用法。尽管这些并不能包含<span lang="EN-US">XML</span>的所有潜在应用，至少是些最重要的领域。<span lang="EN-US">&nbsp;<br></span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span></b><b style="mso-bidi-font-weight: normal"><span style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、数据交换<span lang="EN-US">&nbsp;</span></span></b><span lang="EN-US" style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br></span><span style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">用<span lang="EN-US">XML</span>在应用程序和公司之间作数据交换已不是什么秘密了，毫无疑问应被列为第一位。<span lang="EN-US">&nbsp;<br></span>那么为什么<span lang="EN-US">XML</span>在这个领域里的地位这么重要呢？原因就是<span lang="EN-US">XML</span>使用元素和属性来描述数<span lang="EN-US">&nbsp;<br></span>据。在数据传送过程中，<span lang="EN-US">XML</span>始终保留了诸如父<span lang="EN-US">/</span>子关系这样的数据结构。几个应用程序<span lang="EN-US">&nbsp;<br></span>可以共享和解析同一个<span lang="EN-US">XML</span>文件，不必使用传统的字符串解析或拆解过程。<span lang="EN-US">&nbsp;<br></span>相反，普通文件不对每个数据段做描述<span lang="EN-US">(</span>除了在头文件中<span lang="EN-US">)</span>，也不保留数据关系结构。使<span lang="EN-US">&nbsp;<br></span>用<span lang="EN-US">XML</span>做数据交换可以使应用程序更具有弹性，因为可以用位置<span lang="EN-US">(</span>与普通文件一样<span lang="EN-US">)</span>或用元<span lang="EN-US">&nbsp;<br></span>素名<span lang="EN-US">(</span>从数据库<span lang="EN-US">)</span>来存取<span lang="EN-US">XML</span>数据。<span lang="EN-US">&nbsp;<br></span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span></b><b style="mso-bidi-font-weight: normal"><span style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、<span lang="EN-US">Web</span>服务<span lang="EN-US">&nbsp;</span></span></b><span lang="EN-US" style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>Web</span><span style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">服务是最令人激动的革命之一，它让使用不同系统和不同编程语言的人们能够相互交<span lang="EN-US">&nbsp;<br></span>流和分享数据。其基础在于<span lang="EN-US">Web</span>服务器用<span lang="EN-US">XML</span>在系统之间交换数据。交换数据通常用<span lang="EN-US">XML</span>标<span lang="EN-US">&nbsp;<br></span>记，能使协议取得规范一致，比如在简单对象处理协议<span lang="EN-US">(Simple Object Access Protoc <br>ol, SOAP)</span>平台上。<span lang="EN-US">&nbsp;<br>SOAP</span>可以在用不同编程语言构造的对象之间传递消息。这意味着一个<span lang="EN-US">C#</span>对象能够与一个<span lang="EN-US">&nbsp;<br>Java</span>对象进行通讯。这种通讯甚至可以发生在运行于不同操作系统上的对象之间。<span lang="EN-US">DCOM <br>, CORBA</span>或<span lang="EN-US">Java RMI</span>只能在紧密耦合的对象之间传递消息，<span lang="EN-US">SOAP</span>则可在松耦合对象之间传<span lang="EN-US">&nbsp;<br></span>递消息。<span lang="EN-US">&nbsp;<br></span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span></b><b style="mso-bidi-font-weight: normal"><span style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、内容管理<span lang="EN-US">&nbsp;</span></span></b><span lang="EN-US" style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>XML</span><span style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">只用元素和属性来描述数据，而不提供数据的显示方法。这样，<span lang="EN-US">XML</span>就提供了一个优<span lang="EN-US">&nbsp;<br></span>秀的方法来标记独立于平台和语言的内容。<span lang="EN-US">&nbsp;<br></span>使用象<span lang="EN-US">XSLT</span>这样的语言能够轻易地将<span lang="EN-US">XML</span>文件转换成各种格式文件，比如<span lang="EN-US">HTML, WML, PD <br>F, flat file, EDI, </span>等等。<span lang="EN-US">XML</span>具有的能够运行于不同系统平台之间和转换成不同格式<span lang="EN-US">&nbsp;<br></span>目标文件的能力使得它成为内容管理应用系统中的优秀选择。<span lang="EN-US">&nbsp; <br></span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">4</span></b><b style="mso-bidi-font-weight: normal"><span style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、<span lang="EN-US">Web</span>集成<span lang="EN-US">&nbsp;</span></span></b><span lang="EN-US" style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br></span><span style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">现在有越来越多的设备也支持<span lang="EN-US">XML</span>了。使得<span lang="EN-US">Web</span>开发商可以在个人电子助理和浏览器之间<span lang="EN-US">&nbsp;<br></span>用<span lang="EN-US">XML</span>来传递数据。<span lang="EN-US">&nbsp;<br></span>为什么将<span lang="EN-US">XML</span>文本直接送进这样的设备去呢？这样作的目的是让用户更多地自己掌握数据<span lang="EN-US">&nbsp;<br></span>显示方式，更能体验到实践的快乐。常规的客户<span lang="EN-US">/</span>服务<span lang="EN-US">(C/S)</span>方式为了获得数据排序或更<span lang="EN-US">&nbsp;<br></span>换显示格式，必须向服务器发出申请；而<span lang="EN-US">XML</span>则可以直接处理数据，不必经过向服务器申<span lang="EN-US">&nbsp;<br></span>请查询<span lang="EN-US">-</span>返回结果这样的双向“旅程”，同时在设备也不需要配制数据库。<span lang="EN-US">&nbsp;<br></span>甚至还可以对设备上的<span lang="EN-US">XML</span>文件进行修改并将结果返回给服务器。想像一下，一台具有互<span lang="EN-US">&nbsp;<br></span>联网功能并支持<span lang="EN-US">XML</span>的电冰箱将会给市场带来多么大的冲击吧。你从此不必早起去取牛奶<span lang="EN-US">&nbsp;<br></span>了！<span lang="EN-US">&nbsp;<br></span></span><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">5</span></b><b style="mso-bidi-font-weight: normal"><span style="font-size: 13pt; color: red; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、配制<span lang="EN-US">&nbsp;</span></span></b><span lang="EN-US" style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br></span><span style="font-size: 13pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">许多应用都将配制数据存储在各种文件里，比如<span lang="EN-US">.INI</span>文件。虽然这样的文件格式已经使<span lang="EN-US">&nbsp;<br></span>用多年并一直很好用，但是<span lang="EN-US">XML</span>还是以更为优秀的方式为应用程序标记配制数据。使用<span lang="EN-US">. <br>NET</span>里的类，如<span lang="EN-US">XmlDocument</span>和<span lang="EN-US">XmlTextReader</span>，将配制数据标记为<span lang="EN-US">XML</span>格式，能使其更具<span lang="EN-US">&nbsp;<br></span>可读性，并能方便地集成到应用系统中去。使用<span lang="EN-US">XML</span>配制文件的应用程序能够方便地处理<span lang="EN-US">&nbsp;<br></span>所需数据，不用象其他应用那样要经过重新编译才能修改和维护应用系统。<span lang="EN-US">&nbsp;<br></span>如前所述，这里提到的五种使用<span lang="EN-US">XML</span>的途径不包括全部场合。<span lang="EN-US"><?xml:namespace prefix = o /><o:p></o:p></span></span></p><img src ="http://www.cppblog.com/woaidongmao/aggbug/50444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-19 22:51 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/19/50444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vc++与YACC和LEX集成环境</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/17/50118.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 16 May 2008 16:33:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/17/50118.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/50118.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/17/50118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/50118.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/50118.html</trackback:ping><description><![CDATA[<p>在这里，将介绍由英国Bumble-Bee Software公司生产的Windows环境下的YACC和LEX集成环境Parser Generator。Parser Generator是Windows下YACC和LEX的实现。它包括一个图形用户界面，同时包括YACC和Lex两个版本，分别叫做AYACC和Alex。Parser Generator非常适合于与VC++集成。  <p>在安装了Parser Generator后，执行以下步骤，即可使VC++编译和连接由Parser Generator产生的文件。  <p>1．目录设置  <p>在VC++中执行以下步骤，每个步骤只执行一次。  <p>（1） 选择Tools菜单中的Options命令，在屏幕上即会出现Options对话框。  <p>（2） 选择Directories选项卡。  <p>（3） 在Show Directories for下拉列表框中选择Include Files。  <p>（4） 在Directories框中，点击最后的空目录，并填入Parser Generator的include子目录的路径。  <p>（5） 在Show Directories for下拉列表框中选择Library Files。  <p>（6） 在Directories框中，点击最后的空目录，并填入Parser Generator的lib\msdev子目录的路径。  <p>（7） 在Show Directories for下拉列表框中选择Source Files。  <p>（8） 在Directories框中，点击最后的空目录，并填入Parser Generator的Source子目录的路径。  <p>（9） 点击OK按钮,Options对话框将接受设置并关闭。  <p>VC++在就可以找到包含文件yacc.h和lex.h以及YACC和Lex的库文件。  <p>2．项目设置  <p>对于每个VC++项目，都需在VC++中执行以下步骤：  <p>（1） 选择Project菜单中的Settings命令，在屏幕上即会出现Project Settings对话框。  <p>（2） 在Settings for下拉列表框中选择Win32 Debug。  <p>（3） 选择C/C++标签。  <p>（4） 在Category下拉列表框中选择General。  <p>（5） 在Preprocessor Definitions框中，在当前文本的最后，输入YYDEBUG。  <p>（6） 选择Link标签。  <p>（7） 在Category下拉列表框中选择General。  <p>（8） 在Object/Library Modules框中，在当前文本的后面，输入yld.lib ylmtd.lib ylmtdlld.lib。  <p>（9） 在Settings for下拉列表框中选择Win32 Release。  <p>（10） 重复第8步的工作。  <p>（11） 点击OK按钮，Project Settings对话框将接受设置并关闭。  <p>VC++现在可以从特定的库中接受YACC和Lex所需的函数和变量。  <p>3．应用  <p>（1）在Parser Generator下的编辑窗口输入YACC源程序（扩展名必须为.y）。  <p>（2）用Parser Generator下的Project菜单的Compile file命令编译源程序，生成相应的C语言源程序（.cpp）。  <p>（3）用VC++编译，连接C语言源程序，生成可执行程序（.exe）后即可执行。  <p>用的VC 2005, 和原来VC 6的设置项对应不上, 很多半天都找不到.好不容易找全了, 却还是编译出错.<br>最后,只好选择再装一个VC6, 嗯, 两个VC, 不错.<br>先介绍一下Parser Generator,主页下载:<a href="http://www.bumblebeesoftware.com/downloads.htm">http://www.bumblebeesoftware.com/downloads.htm</a><br>Parser Generator is<strong> a YACC and Lex programming</strong> tool for Windows. As well as including a Graphical User Interace, the software also includes two versions of YACC and Lex, called AYACC and ALex. Parser Generator is able to generate C, C++ and Java parsers and lexical analysers. This includes both Unicode and Multibyte Character Set (MBCS) variants. In your applications you can create multiple, thread safe, instances of these parsers and lexical analysers.  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面说一下windows环境下parser generator和vc++的各项配置  <p>（一）parser generator的环境设置  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装好parser generator，打开集成开发环境，点项目Project菜单，在下拉菜单中选LibBuilder，弹出LibBuilder对话框选择属性按钮，弹出compiler properties 对话框： <br>&nbsp;&nbsp; Name 选择Visual C++ (32-bit)  <p>&nbsp;&nbsp; Directory :msvc32<br>&nbsp;&nbsp; options:  <p>依次为 vc++版本(Versoin 6)<br>是否支持unicode码。(选择默认)<br>是否把w_char_t作为内建类型。(选择默认)<br>下边是VC的各种目录：<br>依次为<br>Compiler Bin Directory (C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\BIN  <p>Compiler Bin Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\COMMON\MSDEV98\BIN  <p>Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE  <p>Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\INCLUDE  <p>Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\LIB  <p>Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\LIB  <p>&nbsp;&nbsp;&nbsp; 注意：编译器安装目录根据个人安装目录需要做相应的调整。所有的这些设置完成之后点ok。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后一步,配置parser generator的properties,如图即可:<br><img src="http://www.cppblog.com/images/cppblog_com/pengkuny/parsergenerator.gif" border="0"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回LibBuilder。点Build就可以编译vc++使用的lex与yacc的lib库。  <p><strong>注:我参考Vs 2003.net的设置,在VC 2005下进行相应设置, 结果lex与yacc的lib库没能编译通过, 可能是我设置错误, 不应该是尚不兼容的问题吧. </strong><br>&nbsp;&nbsp;&nbsp; 生成库文件在软件安装目录下的D:\Parser Generator 2\Cpp\Lib\msvc32目录下。  <p>（二）vc++环境的设置  <p>1.目录设置  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了在VC++中可以找到包含文件yacc.h和lex.h以及YACC和Lex的库文件，需要对VC++进行相关的目录设置<br>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择Tools菜单中的Options命令，打开Options对话框。<br>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择Directories选项卡。<br>（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Show Directories for下拉列表框中选择Include Files。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Directories框中，点击最后的空目录，并填入 F:\PARGEN\CPP\INCLUDE(根据个人安装目录需要做相应的调整)<br>（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Show Directories for下拉列表框中选择Library Files。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Directories框中，点击最后的空目录，并填入F:\PARGEN\CPP\LIB\MSVC32<br>（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Show Directories for下拉列表框中选择Source Files。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Directories框中，点击最后的空目录，并填入F:\PARGEN\CPP\SOURCE<br>（6）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击OK按钮,Options对话框将接受设置并关闭。  <p>2．项目设置<br><strong>对于每个VC++项目，都需在VC++中进行以下设置</strong>，以使VC++可以从特定的库中接受LEX和YACC所需要的函数和变量<br>（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择Project菜单中的Settings命令，打开Project Settings对话框。<br>（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Settings for下拉列表框中选择Win32 Debug。<br>（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择C/C++选项卡， 在Category下拉列表框中选择General。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Preprocessor Definitions框中，在当前文本的最后，输入 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ，YYDEBUG<br><strong>注:对应到VC 2005为C/C++-&gt;Preprocessor-&gt;Preprocessor Definitions.</strong><br>（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择Link选项卡，在Category下拉列表框中选择General。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Object/Library Modules框中，在当前文本的后面，输入yld.lib<br><strong>注:VC 6中的Object/Library Modules对应到VC 2005为Propert-&gt;Configuration Properties-&gt;Linker-&gt;Input-&gt;Additional Dependencies ,找了好久.<img height="20" src="http://www.cppblog.com/Emoticons/QQ/17.gif" width="20" border="0"></strong><br>（5）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Settings for下拉列表框中选择Win32 Release。<br>（6）&nbsp;&nbsp;&nbsp;&nbsp; 重复第4步的工作。<br>（7）&nbsp;&nbsp; 点击OK按钮，Project Settings对话框设置完毕。  <p>&nbsp;&nbsp; 这样设置之后我们就可以用vc++编译Parser Generator 生成的c文件了。具体为：<br>先打开Parser Generator 集成开发环境。点击Project菜单，点击下拉菜单中的ParseWizard菜单，一路下去建立一个工程。然后点击project菜单下的的Rebuild All。在项目文件夹下就生成了相应c文件与h文件。<br>再用VC++建立一个空控制台工程，然后把用用Parser Generator <br>生成的c文件和头文件加入工程中。接着对VC++进行上面所说的项目设置，然后就可以编译运行了。新手可以使用parser generator 自带的范例，这样方便检验环境的配置是否正确.</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/50118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-17 00:33 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/17/50118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Yacc &amp;amp; Lex</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/17/50117.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Fri, 16 May 2008 16:20:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/17/50117.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/50117.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/17/50117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/50117.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/50117.html</trackback:ping><description><![CDATA[<p></p> <p>yacc(Yet Another Compiler Compiler)，是Unix/Linux上一个用来生成编译器的编译器（编译器代码生成器）。yacc生成的编译器主要是用C语言写成的语法解析器（Parser），需要与词法解析器Lex一起使用，再把两部份产生出来的C程序一并编译。yacc本来只在Unix系统上才有，但现时已普遍移植往Windows及其他平台。<br>分析程序生成器(parser generator)是一个指定某个格式中的一种语言的语法作为它的输入，并为该种语言产生分析过程以作为它的输出的程序。在历史上，分析程序生成器被称作编译-编译程序( compiler- compiler )，这是由于按照规律可将所有的编译步骤作为包含在分析程序中的动作来执行。现在的观点是将分析程序仅考虑为编译处理的一个部分，所以这个术语也就有些过时了。合并 LALR(1) 分析算法是一种常用的分析生成器，它被称作 Yacc( yet another compiler- compiler )。给出 Yacc 的概貌来，将使用Yacc为 TINY 语言开发一个分析程序。<br>作为 Yacc 对说明文件中的 %token NUMBER 声明的对应。Yacc 坚持定义所有的符号记号本身，而不是从别的地方引入一个定义。但是却有可能通过在记号声明中的记号名之后书写一个值来指定将赋给记号的数字值。<br>yacc的输入是巴科斯范式（BNF）表达的语法规则以及语法规约的处理代码，Yacc输出的是基于表驱动的编译器，包含输入的语法规约的处理代码部分。<br>yacc是开发编译器的一个有用的工具,采用LALR(1)语法分析方法。<br>Yacc最初由AT&amp;T的Steven C. Johnson为Unix操作系统开发，后来一些兼容的程序如Berkeley Yacc，GNU bison，MKS yacc和Abraxas yacc陆续出现。它们都在原先基础上做了少许改进或者增加，但是基本概念是相同的。<br>由于所产生的解析器需要词法分析器配合，因此Yacc经常和词法分析器的产生器——一般就是Lex——联合使用。IEEE POSIX P1003.2 标准定义了Lex和Yacc的功能和需求。<br><a href="http://dickey.his.com/byacc/byacc.html">http://dickey.his.com/byacc/byacc.html</a> Berkeley Yacc 一般认为是目前最好的yacc变种。与bison相比，避免了对特定编译器的依赖。<br><a href="http://www.informatik.uni-freiburg.de/proglang/software/essence/">http://www.informatik.uni-freiburg.de/proglang/software/essence/</a> Essence，Scheme的LR(1)语法解析器的生成器<br><a href="http://download.plt-scheme.org/scheme/plt/collects/parser-tools/">http://download.plt-scheme.org/scheme/plt/collects/parser-tools/</a> 用于DrScheme的语法解析工具<br><a href="http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/">http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/</a> Coco/R Java和C#的扫描和解析器<br><a href="http://mhss.nease.net/unix/yacc.html">http://mhss.nease.net/unix/yacc.html</a> Yacc: 另一个编译器的编译器,Stephen C. Johnson&nbsp;&nbsp; <p>&nbsp;</p> <p><strong><em><font size="5">IBM的快速入门</font></em></strong></p> <p><a title="http://www.ibm.com/developerworks/cn/linux/sdk/lex/" href="http://www.ibm.com/developerworks/cn/linux/sdk/lex/"><strong><em><font size="5">http://www.ibm.com/developerworks/cn/linux/sdk/lex/</font></em></strong></a></p> <p>&nbsp;</p> <p><strong><em>windows下的lex与yacc工具</em></strong></p> <p>只所以推荐它是因为它生成的c文件可以在vc++下通过编译。<br>&nbsp;&nbsp;&nbsp;&nbsp; 下载地址 <a href="http://www.bumblebeesoftware.com/downloads.htm">http://www.bumblebeesoftware.com/downloads.htm</a><br>下载之后，解压缩，然后安装。打开集成开发环境，点项目Project菜单，在下拉菜单中选LibBuilder，弹出LibBuilder对话框选择属性按钮<br>弹出compiler properties 对话框，<br>Name 选择Visual C++ (32-bit)<br>Directory :msvc32<br>options:<br>依次为<br>vc++版本(Versoin 7(.net))。<br>是否支持unicode码。<br>是否把w_char_t作为内建类型。<br>下边是VC的各种目录：<br>依次为<br>Compiler Bin Directory (C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\BIN)<br>Compiler Bin Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\COMMON7\IDE)<br>Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\INCLUDE)<br>Compiler Include Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\PLATFORMSDK\INCLUDE)<br>Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\LIB)<br>Compiler Library Directory(C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\PLATFORMSDK\LIB)<br>注意：括号里边的是我自己编译器安装目录，也许你的和我的不一样，需要做相应的调整。<br>所有的这些设置完成之后点ok。返回LibBuilder。点Build就可以编译vc++使用的lex与yacc的lib库。生成库文件在软件安装目录下的D:\Parser Generator 2\Cpp\Lib\msvc32目录下。<br>然后我们我们在vc++环境设置中增加包含文件目录D:\Parser Generator 2\Cpp\Include<br>lib库目录D:\Parser Generator 2\Cpp\Lib\msvc32<br>具体设置<br>打开VC++.net集成开发环境。<br>点工具菜单<br>下拉菜单中点选项菜单。<br>弹出框中点左边列表框中的projects，然后点击vc++目录<br>在显示以下内容目录标签下的列表框中“选包含目录”进行设置，选“库文件”进行设置。<br>具体设置就是点击列表框下边五个按钮中的第二个按钮，就加入一行，当选择“包含目录”的时候填入D:\Parser Generator 2\Cpp\Include，当选择“库文件”的时候填入D:\Parser Generator 2\Cpp\Lib\msvc32，也可以点右边的浏览按钮进行选择。<br>这样设置之后我们就可以用vc++编译用Parser Generator 2生成的c文件。具体为<br>打开Parser Generator 2集成开发环境。<br>点击Project菜单，点击下拉菜单中的ParseWizard菜单，一路下去建立一个工程。然后点击project菜单下的的Rebuild All。在项目文件夹下就生成了相应c文件与h文件。<br>用VC++建立一个空控制台工程，然后把用用Parser Generator 2生成的c文件加入工程中。最后引入响应的库文件，就是我们在D:\Parser Generator 2\Cpp\Lib\msvc32目录下生成的lex与yacc库文件。接着编译，如果成功，那么万事大吉。 <img src ="http://www.cppblog.com/woaidongmao/aggbug/50117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-17 00:20 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/17/50117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Rational Rose进行C++代码的逆向工程介绍</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49463.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 10 May 2008 12:58:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49463.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49463.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49463.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49463.html</trackback:ping><description><![CDATA[<blockquote>Rational Rose是利用UML（统一建模语言）进行分析和设计面向对象软件系统的强大的可视化工具，可以进行项目需求分析、结构规划和生成框架代码，还可以支持从现有系统逆向转出工程代码，生成Rose模型的功能。</blockquote> <p>2004年10月，IBM推出了支持最新的UML2.0的可视化建模工具<a href="http://www-900.ibm.com/cn/software/rational/products/awdtools/architect/swarchitect/index.shtml"> Rational Software Architect</a>（见注释①） 和<a href="http://www-900.ibm.com/cn/software/rational/products/awdtools/modeler/swmodeler/index.shtml">IBM Rational Software Modeler</a>（见注释②）。虽然它们支持在建模功能上有了更好的改进、支持了更新的标准，但是RSA的精彩功能主要是集中在对Java应用的支持，而IBM Rational Software Modeler则是主要关注系统的模型设计，如果要从结构上分析C++编写的系统的代码，<a href="http://www-900.cn.ibm.com/cn/software/rational/products/rose/index.shtml">Rational Rose</a>还是首选的工具。 <p>接下来的文章将会对如何利用Rational Rose 的逆向转出工程来进行系统分析进行更加详细地阐述。 <p><a name="N1004D">一．Rational Rose逆向工程介绍</a> <p>逆向工程（Reverse Engineer）就是从现有系统的代码来生成模型的功能。分析已有的代码其主要的目的就是了解代码结构和数据结构，这些对应到模型图就是类图、数据模型图和组件图（对UML各种模型图的描述见注释③），也就是通过Rational Rose的逆向工程所得到的结果。Rational Rose所支持的逆向工程功能很强大，包括的编程语言有C++, VB, VC, Java, CORBA，以及数据库DDL脚本等等，并且可以直接连接DB2, SQLServer, Oracle和Sybase等数据库导入Schema并生成数据模型。 <p>很多大型的C++开发的产品都涉及到数据库的使用，对这种大型系统的开发，尤其是做二次开发的情况下，主要的难点就是对源码和数据库结构的分析。而利用Rose的逆向工程这一功能，就可以完成代码'类图以及数据库Schema-&gt;数据模型图的转换，解决这两大难点，可以使开发和设计人员在对这种大型系统的升级、分析和开发中，更为方便、快捷、有条理地掌握系统结构，不用再为分析庞大的系统结构而头疼。 <p><img height="1" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"><br><img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"> <p><img height="4" src="http://www.ibm.com/i/c.gif" width="100%"> <p><img height="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0"><br><a href="http://www.ibm.com/developerworks/cn/rational/r-shenzj/#main"><strong>回页首</strong></a> <p><a name="N10059">二．如何用Rational Rose进行C++代码分析</a> <p>这一节主要介绍用户如何使用Rose的逆向工程生成UML模型，并用来进行C++代码的结构分析。 <p>Rational Rose可以支持标准C++和Visual C++的模型到代码的转换以及逆向工程。下面将详细地说明这两种C++ project的逆向工程的步骤和具体操作。 <p>1． ANSI C++（标准C++）逆向工程（Reverse Engineer）使用标准C++逆向工程，需要在组件图（component view）中创建一个组件（component），设置好需要进行转换的组件的信息，也就是该组件的语言、所包含的文件、文件所在的路径、文件后缀等等信息，然后Reverse Engineer就可以根据给定的信息将代码转换成类图了。 <p>a) 右键点击组件视图（Component View），选择New-&gt;Component，创建一个新的组件 <p><img height="398" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image001.png" width="508" border="0"> <p>b) 将component的language属性设定为ANSI C++ <p>①选中创建的component，点击右键，选中Open Specification <p><img height="283" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image003.png" width="405" border="0"> <p>②在这个对话框中将该component的language设定为ANSI C++ <p><img height="340" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image005.png" width="516" border="0"> <p>c) 配置该ANSI C++ component，设置好该component中包含的C++代码文件，并进行C++语言的详细设置 <p>①选中该component，点击右键，选择ANSI C++-&gt;Open ANSI C++ Specification <p><img height="356" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image007.png" width="564" border="0"> <p>②把Source file root directory设定为你的C++源码文件所在的路径，并且将需要转换的文件添加到Project Files中，视你的需要来做其它的设定，比如：头文件扩展名等等。 <p><img height="436" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image009.png" width="572" border="0"> <p>d) 将设置好的component转换成模型图 <p>①选中设置好的component，点击右键，选中ANSI C++-&gt;Reverse Engineer <p><img height="330" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image011.png" width="572" border="0"> <p>②选中需要转换的class，点击ok，一个component的逆向转换就完成了。 <p><img height="431" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image013.png" width="547" border="0"> <p>2． Visual C++ 在使用这个功能的时候，要求用户的机器上同时安装Visual Studio。Visual C++的逆向工程也需要首先创建一个component，并将该component的language属性设置为VC++。Rational Rose对VC++模型的转换是通过读取VC++ Project File的信息来实现的，用户只需要将对应的project file信息指定给component就可以了。 <p>a) 将VC++ Project的信息赋给刚刚创建好的component。 <p>①选择该component，点击右键，选择Assign To Project <p><img height="301" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image015.png" width="424" border="0"> <p>②在对话框中找到刚刚创建的component，右键点击并选择Properties。 <p><img height="413" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image017.png" width="513" border="0"> <p>③在下面对话框中选中需要进行转换的Project，点击ok，该component就与需要转换的project关联上了。 <p><img height="468" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image019.png" width="403" border="0"> <p>b) 将设置好的component转换成模型图 <p>选中设置好的component，点击右键，Update Model…，将会弹出确认对话框，选中需要转换的class，点击finish就可以了。 <p><img height="262" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image021.png" width="376" border="0"><br><img height="428" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image023.png" width="572" border="0"> <p><img height="1" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"><br><img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"> <p><img height="4" src="http://www.ibm.com/i/c.gif" width="100%"> <p><img height="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0"><br><a href="http://www.ibm.com/developerworks/cn/rational/r-shenzj/#main"><strong>回页首</strong></a> <p><a name="N10169">三．如何用Rational Rose进行数据库结构分析</a> <p>利用Rational Rose可以进行关系数据库的数据模型设计并导出DDL语言脚本，相反还可以导入已有的DDL脚本生成数据模型以及连接SQLServer, DB2, Oracle等数据库并导入数据库的schema生成数据模型。 <p>下面以SQL Server为例说明一下逆向转换工程的步骤。 <p>a) 首先，选择Tools-&gt;Data Modeler-&gt; Reverse Engineer <p><img height="420" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image025.png" width="557" border="0"> <p>b) 在进行逆向工程转换的过程中可以选择是从数据库还是DDL脚本进行转换，如果是DDL脚本转换，就直接给定DDL脚本文件位置就可以了。本例子给出的是连接SQLServer数据库将schema导入生成数据模型的过程，所以选中Database，进入下一步。 <p><img height="345" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image027.png" width="572" border="0"> <p>c) 填写数据库相关信息 <p><img height="373" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image029.png" width="572" border="0"> <p>d) 选中所有需要转换的schema <p><img height="373" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image031.png" width="572" border="0"> <p>e) 选择需要将哪些数据库中的元素导入到数据模型中 <p><img height="372" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image033.png" width="572" border="0"> <p>转换操作会自动在组件图（Component View）中添加数据库组件，并在逻辑图（Logical View）中生成以《Schema》作为命名开头的数据模型。 <p><img height="406" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image035.png" width="361" border="0"> <p>打开数据模型，可以看到从数据库中转换过来的各个表和视图。 <p><img height="540" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image037.png" width="572" border="0"> <p>从数据模型图中可以看到表的结构以及各个表和视图之间的逻辑关系。 <p><img height="1" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"><br><img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"> <p><img height="4" src="http://www.ibm.com/i/c.gif" width="100%"> <p><img height="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0"><br><a href="http://www.ibm.com/developerworks/cn/rational/r-shenzj/#main"><strong>回页首</strong></a> <p><a name="N10204">四．如何得到逆向工程的模型图</a> <p>在Rational Rose中，有些模型图是不会自动生成的，很多时候这个工作需要用户手工来完成。也就是说，Rational Rose只负责生成模型，包括模型中的元素、元素的属性以及各个元素之间的关系，但是需要用户做一些额外的工作来得到视图。 <p>首先，通过逆向工程，用户已经得到了UML模型或者数据模型的各个组件以及它们之间的关系。 下一步需要在该模型上创建一个视图，它们可以是类图（class diagram，描述系统的静态结构）或者数据模型图（Data model digram，描述关系数据结构）。然后，手动从左边的explorer中将各个元素拖进视图中，在这个过程中，各个元素之间的关联关系会自动在图中表示出来，而不需要用户再做其他工作。 <p>例如：生成一个数据模型的数据模型图的过程 <p>从左边将数据模型中的数据元素拖到右边的数据模型图中，表CustomerCustomerDemo和表CustomerDemographics之间的依赖关系的菱形箭头是自动生成的，无需手工操作。 <p><img height="380" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image039.png" width="572" border="0"> <p>一般来说，一个系统中所涉及的数据元素非常多，导致视图很拥挤，排版也非常困难。Rational Rose提供的自动排版功能可以很方便地帮助用户解决这个问题。 <p>选择Format-&gt;Layout Diagram，系统会将图中的所有元素用最优方式重新排列，给用户一个清晰的视图。 <p><img height="526" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image041.png" width="399" border="0"><br><img height="336" src="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image043.png" width="500" border="0"><br><a href="http://www.ibm.com/developerworks/cn/rational/r-shenzj/images/image043.png">点击查看大图</a> <p><img height="1" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"><br><img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"> <p><img height="4" src="http://www.ibm.com/i/c.gif" width="100%"> <p><img height="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0"><br><a href="http://www.ibm.com/developerworks/cn/rational/r-shenzj/#main"><strong>回页首</strong></a> <p><a name="N10257">五．总结</a> <p>了解了Rational Rose的逆向工程功能，用户就可以方便地利用这一工具进行大型数据库相关的C++系统的分析和研究了。 <p><img height="1" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%"><br><img height="6" src="http://www.ibm.com/i/c.gif" width="8" border="0"> <p><img height="4" src="http://www.ibm.com/i/c.gif" width="100%"> <p><img height="16" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0"><br><a href="http://www.ibm.com/developerworks/cn/rational/r-shenzj/#main"><strong>回页首</strong></a> <p><a name="N10260">注释</a> <p>①IBM Rational Software Architect是一个集成式设计和开发工具，使用户可以用UML模型驱动的开发方式开发出结构清晰的应用程序和服务。 <p>②IBM Rational Software Modeler是基于UML2.0的可定制的可视化建模和设计工具，遵循它所提供的工作流程，可以使得系统设计师，系统分析师，设计人员等写出更为清晰的文档，更为有效地进行沟通和设计工作。 <p>③UML提供的各种类型的模型描述图 <p>用例图(Use Case Diagram)：描述系统提供的一个功能单元，主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求，包括基于基本流程的"角色"（actors，也就是与系统交互的其他实体）关系，以及系统内用例之间的关系。 <p>序列图(Sequence Diagram)：显示具体用例（或者是用例的一部分）的详细流程。 <p>状态图(Statechart Diagram)：表示某个类所处的不同状态和该类的状态转换信息。 <p>活动图(Activity Diagram)：表示在处理某个活动时，两个或者更多类对象之间的过程控制流。 <p>类图(Class Diagram)：表示不同的实体（人、事物和数据）如何彼此相关；换句话说，它显示了系统的静态结构。 <p>组件图(Component Diagram)：提供系统的物理视图。组件（Component）表示模型代码库、执行库和其它组件的信息。组件是代码的实际模块，组件图主要用户是负责控制代码和编译部署应用程序的人。有些组件是代码库，有些组件是运行组件，如执行文件或动态链接库（DLL）文件。） <p>部署图(Deployment View)：表示该软件系统如何部署到硬件环境中。 <p>数据模型图(Data Model Diagram)：描述关系数据结构。 <img src ="http://www.cppblog.com/woaidongmao/aggbug/49463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-10 20:58 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/10/49463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>山寨机的前世今身</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49412.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Sat, 10 May 2008 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49412.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/49412.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/10/49412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/49412.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/49412.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 随着<a href="http://www.digi-fashion.com/shouji/20080314/1231.html">HiPhone</a>中国橘子手机的异军突起，山寨手机突然在一夜间咸鱼翻身，摆脱了黑手机的包袱，获得了众多手机迷的青睐，并随后涌现出了待机王<a href="http://www.digi-fashion.com/shouji/20080329/1373.html">ZJ268</a>、科幻手表手机<a href="http://www.digi-fashion.com/meizhoukutu/20080411/1491.html">cooLG108</a>等一批精品山寨机。那到底山寨机从何尔来呢，就让听听笔者述说的山寨机前世今身吧。  <p>字串6 <p><a href="http://www.digi-fashion.com/upimg/userup/0804/200S223NX.jpg"><img height="335" alt="" src="http://www.digi-fashion.com/upimg/userup/0804/200S223NX.jpg" width="447" border="0"></a> <p>字串7 <p>（山寨机王HiPhone）  <p>字串5 <p>&nbsp;&nbsp;&nbsp; 事情的经过还要从一位叫蔡明介的台湾人说起，蔡是工程师出身，创办了一家叫联发科（英文简称为MTK）的电子公司，专门生产各种芯片。 字串6 <p><a href="http://www.shanzhaiji.cn/uploads/userup/0803/2911052WV7.jpg"></a><a href="http://www.digi-fashion.com/upimg/userup/0804/200S25S548.jpg"><img height="240" alt="" src="http://www.digi-fashion.com/upimg/userup/0804/200S25S548.jpg" width="320" border="0"></a> 字串5 <p><strong>联发科董事长蔡明介</strong> <p>字串3 <p>　　大约在2000年的时候，蔡决定进军手机市场，当时还是诺基亚和摩托罗拉的天下，哦，对了，还有三星的翻盖机，一台3000元，成功人士才用得起，对蔡的决定，大家的反应就两字，疯了。  <p>字串7 <p>字串4 <p>　　但就这个看似疯了的举动，却创造了一个奇迹。  <p>字串2 <p>字串6 <p>　　话分两头，那边说完了联发科，这边说说当时国内的手机市场。 字串6 <p>字串9 <p>　　当时国内手机市场随着一位名人，万博士的出现，也走进了一个高潮，如果说蔡工的理念是从芯片做起的话，万博士的创举是在手机上镶一块钻石，虽然现在我们知道那块钻石其实就是八心八箭之类的货色，但当时，TCL手机还真卖疯了，各种国产手机也跟着卖疯了。  <p>字串7 <p>字串1 <p>　　那时候的国产手机有几个很有名的通病～反应慢，容易死机，故障率高，模具差，能漏光，当时还实行着手机牌照制度，关于这个牌照制度，如果套用到电脑上的话，大家可以这样理解，如果你没有得到牌照，你就不准装电脑。  <p>字串8 <p>字串6 <p>　　有牌照手机就有黑手机，“臭名昭著”的黑手机就是从那时起泛滥的，那时候的黑手机都是采用韩国的方案，由大陆深圳东莞一带的手机厂代工，我亲眼看到某手机大厂出口了一集装箱上边打着“韩国制造”的手机到香港，当然这车手机最后的归属肯定还是被卖回来。  <p>字串9 <p>字串4 <p>　　那时候的黑手机一般都有不错的功能，MP3，彩屏，折叠，黑手机第一次让大家知道三星之黑，差不多功能的手机黑手机比三星便宜一半。  <p>字串1 <p>字串3 <p>　　但那时候黑手机还是有个致命缺陷，它采用的是韩国小公司的方案，故障率高，系统不稳定，用个一年半载的肯定坏。 字串5 <p>字串1 <p>　　而有牌照的国产的宝石手机们，也慢慢走向了没落，在大家都知道宝石其实是块铅玻璃以后。 字串3 <p>字串9 <p>　　在国产手机成为价廉质次的代名词，诺基亚、摩托罗拉大举降价之后，国家终于放开了手机牌照制度，也就是说，市场上再没有黑手机这个概念了，只要你能造出一部手机来，你就能卖，当然，此时黑手机早已卖不动，黑手机和国产手机，就像一对难兄难弟，大眼瞪小眼，当然这对难兄难弟还在互相指责，N多的国产手机生产厂商指责黑手机破坏市场，政府不作为导致国产手机业大滑坡云云 字串4 <p>看起来中国手机业是没有指望了，直到联发科的出现，联发科的老蔡，走了一条很天才，很BH的手机之路，他把手机当兼容机卖，简单点说，老蔡把手机主板，软件集成到一起卖，只要加个外壳和电池，谁都能用老蔡提供的手机半系统生产出一台手机，就像你去市场买一台兼容机一样，CPU、内存、硬盘、显卡都给你配好，你只要用螺丝把它们拧紧，你唯一能选的硬件是机箱，这套系统的功能是什么呢？摄像头、MP3MP4、支持储存卡、触摸屏～JAVA，蓝牙，你想得出来的功能它都有，最重要的是，它便宜，极端便宜，一套这样的系统，在深圳只卖300-400块钱，我说的是三年前，老蔡把这套手机系统做到了及致，真正做到了手机白菜价，所以，老蔡成功了。市面上所有的黑手机都用了联发科的系统，后来所有的大厂，所谓的大厂，也用了联发科的系统，因为出货量实在太大，所以联发科的这套系统故障率非常低，这说起来也很容易理解，规模效应，所以联发科的出货量更多，所以联发科的质量更稳定，现在你知道为什么联想和长虹的手机长的那么像了吧？现在你知道为什么金立和天语就是一母所生了吧，很简单，其实它们都是同一款手机，只不过装了不同的软件而已，联发科的手机很好认，屏幕下方有一排四个功能键，黑底白色图标，有兴趣的可以在电视购物的时候看一看。 字串6 <p><a href="http://www.shanzhaiji.cn/uploads/userup/0803/29110Q61V9.jpg"></a><a href="http://www.digi-fashion.com/upimg/userup/0804/200S32015G.jpg"><img height="329" alt="" src="http://www.digi-fashion.com/upimg/userup/0804/200S32015G.jpg" width="500" border="0"></a> 字串3 <p><strong>联发科技</strong> 字串7 <p>　　现在再回到黑手机上来，早期黑手机质量差速度慢，因为它们选用的是廉价系统，现在黑手机，哦，对了，现在已经没有黑手机这个概念了，大厂给它们安了个“山寨机”的蔑，如今的黑手机同样是选用联发科的系统，再配块电池，质量只怕比诺基亚还稳定，为什么？一款主板做上几千万套，它能不稳定吗？就像电脑里的兼容机，组装机就真的比联想的机器质量差吗？山寨机，说穿了就是一些人利用联发科的主板做出来的兼容机，这些机器功能一项也不会少，当然想少一项功能其实也不容易，电池容量特别大，价格比诺基亚的便宜3/4，比大厂手机便宜一半，现在你再去看看电视购物里的XX手机，特价1999，是不是有砸了电视的冲动？成本300块，电视购物就真敢卖1999，特价优惠。  <p>字串5 <p>　　所以，无论谁，买了山寨机以后，都有一种以前被人骗惨了的感觉，山寨机便宜，功能强，质量稳定，而且从内到外都是华人做的，有什么理由不选择它呢？就因为它名字不好？叫山寨机？就因为它不够贵？显不出您有钱？<br>　　在文章结尾，笔者再举一个真实的数据：联发科手机去年在大陆市场占有率为42.8％；大陆所有的手机厂，除了夏新，都是用的联发科，也就是说其实所谓的国产品牌机其实和山寨机在本质上并没什么太大区别，都是采用了相同的MTK方案 ，所以请不要带着有色眼镜去看山寨机。拒绝暴利，山寨机最高！ <p>&nbsp; <h5><a href="http://space.taobao.com/">我为什么喜欢山寨机？</a></h5> <p>2008/04 08 <ul> <li>已有 <a href="http://space.taobao.com/#CommentContent">0</a> 条评论  <li>文章分类： <a href="http://space.taobao.com/">全部文章</a></li></ul> <p>在深圳华强北遍地的手机群中，为什么我会钟情于山寨机？ <p>论做工，部分山寨机与大品牌机确实有差距。 <p>论品牌，自然是山寨机处于绝对下风。 <p>既然这样，为什么还会喜欢山寨机，甚至有点疯狂？ <p>1，价格，可以用极低的价格购买到你想要的机子，如果要用智能机，可以选择coolo818，如果不喜欢sp可以选择选择cool818i。曾经一千不到的价格也引起很多人的关注。 <p>2，功能，智能的就不用说了，三四百可以买到带mp3，mp4，摄像头的彩屏手机，700-800可以买到不错的大屏多功能手机。记得年前带上小弟在诺基亚专卖找低价手机，一款4096色的sms彩屏竟然要499大元。当你的口袋只有少少的米的时候，不知你会怎么选择？ <p>3，声音，大部分的时候我们是处于一个嘈杂的环境中，想要不漏接电话，想要在这样的环境中和对方沟通，没有一个通话声音大，来电铃声大的手机是很难做到的。山寨机正好有这方面的优势。我们经常可以在公交车等公共场所听到一阵喧闹的铃声，暂且不论对别人的影响，至少我们可以避免重要的电话漏接。 <p>4，手写，山寨机的一个很大贡献就是大量的采用手写触摸屏。想我们的上一辈至上一辈，会拼音的有多少？用笔画输入法的有多少？手写屏幕的普及很大程度上方便了这部分人。当初想给老爸买一个手机可是经过千挑万选。其实也很简单的要求，可以手写，有键盘，待机长，通话声音大。对于半老头，首先排除了多普达，moto1200之类的智能机，一番筛选对比之后最终还是选择了寨寨机，各方面要求都能达到，还不贵。使用至今都没有出现什么问题，寨寨机也不是低质低价的代名词。</p><img src ="http://www.cppblog.com/woaidongmao/aggbug/49412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-10 10:56 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/10/49412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用Office2003来打开Docx、xlsb、xlsx等文件</title><link>http://www.cppblog.com/woaidongmao/archive/2008/05/05/48881.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Mon, 05 May 2008 04:10:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/05/05/48881.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/48881.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/05/05/48881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/48881.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/48881.html</trackback:ping><description><![CDATA[<p>office 2003打开2007版本的Docx文件，全是乱码。只需要安装一个补丁即可，名称为O2007Cnv.exe，链接为：  <p><a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=941B3470-3AE9-4AEE-8F43-C6BB74CD1466&amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=941B3470-3AE9-4AEE-8F43-C6BB74CD1466&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyId=941B3470-3AE9-4AEE-8F43-C6BB74CD1466&amp;displaylang=en</a>  <p>注意安装之后重启机器，问题基本就解决了，现在就可以识别出docx、docm格式的Word 2007文档，pptx、pptm、potx、potm、ppsx、ppsm格式的PowerPoint 2007文档，xlsb、xlsx、xlsm、xltx、xltm格式的Excel 2007文档等。  <p>微软官方相关文章:<br><a href="http://support.microsoft.com/kb/924074/zh-cn">http://support.microsoft.com/kb/924074/zh-cn</a><img src ="http://www.cppblog.com/woaidongmao/aggbug/48881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-05-05 12:10 <a href="http://www.cppblog.com/woaidongmao/archive/2008/05/05/48881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows Live Writer写博客，体验一下</title><link>http://www.cppblog.com/woaidongmao/archive/2008/04/15/47166.html</link><dc:creator>肥仔</dc:creator><author>肥仔</author><pubDate>Tue, 15 Apr 2008 14:54:00 GMT</pubDate><guid>http://www.cppblog.com/woaidongmao/archive/2008/04/15/47166.html</guid><wfw:comment>http://www.cppblog.com/woaidongmao/comments/47166.html</wfw:comment><comments>http://www.cppblog.com/woaidongmao/archive/2008/04/15/47166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/woaidongmao/comments/commentRss/47166.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/woaidongmao/services/trackbacks/47166.html</trackback:ping><description><![CDATA[<p>似乎还不错，发上去看看。效果好象还可以，比在网上写爽多了。本文由Woindows Live Write 撰写。</p> <p><a href="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/WindowsLiveWriter_1421A/image_2.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="447" alt="image" src="http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/WindowsLiveWriter_1421A/image_thumb.png" width="732" border="0"></a></p><img src ="http://www.cppblog.com/woaidongmao/aggbug/47166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/woaidongmao/" target="_blank">肥仔</a> 2008-04-15 22:54 <a href="http://www.cppblog.com/woaidongmao/archive/2008/04/15/47166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>