﻿<?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>IT博客-Welcome To Oliver_Yin's  Blog!-文章分类-其他</title><link>http://www.cnitblog.com/oliver_yin/category/494.html</link><description>打字--&gt; 死打字--&gt;抄写程序--&gt;研究程序--&gt;分析需求 
--&gt;分析架构--&gt;项目管理--&gt;企业信息化--&gt;.........</description><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 11:35:20 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 11:35:20 GMT</pubDate><ttl>60</ttl><item><title>如何重置 Visual Assist X 试用时间</title><link>http://www.cnitblog.com/oliver_yin/articles/4076.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Tue, 08 Nov 2005 05:05:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/4076.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/4076.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/4076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/4076.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/4076.html</trackback:ping><description><![CDATA[<DIV class=postTitle><A id=_3f85de92bc55_HomePageDays_DaysList_ctl08_DayItem_DayList_ctl00_TitleUrl href="http://caviler.cndev.org/archive/2005/01/27/5908.aspx">【编程】编程语言(C++) - 工具 - 如何重置 Visual Assist X 试用时间</A> </DIV>
<DIV class=postText>Visual Assist X 是一个非常好的 Visual Studio 6.0 IDE 辅助工具, 但我一直没有找到注册码，当 Visual Assist X 过期后，有一种方法可以重置 Visual Assist X 的过期时间，供参考，步骤如下：<BR>1、关闭 Visual Studio 6.0。<BR>2、删除注册表中的 HKLM\Software\Licenses 键值。<BR>3、删除 %TEMP% 中的 .tmp 文件。<BR>4、在注册表中搜索关键字 "nLxxQ" ，会找到一个类似于下面所示的 COM 注册项，删除整个该项。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKCU\CLSID\{BC29421E-12B6-4630-A281-E18D215BC63E}</DIV><img src ="http://www.cnitblog.com/oliver_yin/aggbug/4076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-11-08 13:05 <a href="http://www.cnitblog.com/oliver_yin/articles/4076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操作Excel 代码</title><link>http://www.cnitblog.com/oliver_yin/articles/3644.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Fri, 28 Oct 2005 07:42:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/3644.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/3644.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/3644.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/3644.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/3644.html</trackback:ping><description><![CDATA[<DIV>Private Sub nProcessPnt(iType As String) 'Print Line data<BR>&nbsp;&nbsp;&nbsp; On Error GoTo ErrHandling<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Screen.MousePointer = 11<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Dim myworkbook As Excel.Workbook<BR>&nbsp;&nbsp;&nbsp; Dim myworksheet As Excel.Worksheet<BR>&nbsp;&nbsp;&nbsp; Dim myworksheet2 As Excel.Worksheet<BR>&nbsp;&nbsp;&nbsp; Dim iRangeTmp As Excel.Range</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; If Not RptXls Is Nothing Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If RptXls.Workbooks.count = 0 Then RptXls.Application.Quit<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Set RptXls = Nothing<BR>&nbsp;&nbsp;&nbsp; Set RptXls = CreateObject("excel.application")<BR>&nbsp;&nbsp;&nbsp; ExcelStatus = True<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; RptXls.Visible = False<BR>&nbsp;&nbsp;&nbsp; If iType = "0" Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RptXls.Workbooks.Open FileName:=App.Path &amp; "\rpt\OQC品質抽樣月報.xls", ReadOnly:=True<BR>&nbsp;&nbsp;&nbsp; Else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RptXls.Workbooks.Open FileName:=App.Path &amp; "\rpt\OQC品質抽樣月報.xls"<BR>&nbsp;&nbsp;&nbsp; End If</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; RptXls.Application.DisplayAlerts = False<BR>&nbsp;&nbsp;&nbsp; Set myworkbook = RptXls.ActiveWorkbook<BR>&nbsp;&nbsp;&nbsp; Set myworksheet = myworkbook.Worksheets("sheet1")<BR>&nbsp;&nbsp;&nbsp; Set iRangeTmp = RptXls.ActiveCell<BR>&nbsp;&nbsp;&nbsp; myworksheet.Rows("1:1").HorizontalAlignment = xlCenter<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; With grdData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Row = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Col = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RowSel = grdData.Rows - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ColSel = grdData.Cols - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.SetText .Clip<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.GetData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Range("A3").Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Paste<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; With grdData2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Row = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Col = grdData2.Cols - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RowSel = grdData2.Rows - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ColSel = grdData2.Cols - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.SetText .Clip<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.GetData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Range("F4").Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Paste<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; With grdData1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Row = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Col = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RowSel = grdData1.Rows - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ColSel = grdData1.Cols - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.SetText .Clip<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.GetData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Range("A16").Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Paste<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; With grdData4<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Row = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Col = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RowSel = grdData4.Rows - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ColSel = grdData4.Cols - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.SetText .Clip<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.GetData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Range("A22").Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.Paste<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; '將sheet2設為目前sheet add by mandy 2002/11/19<BR>&nbsp;&nbsp;&nbsp; Set myworksheet2 = myworkbook.Worksheets("Sheet2")<BR>&nbsp;&nbsp;&nbsp; myworkbook.Sheets("Sheet2").Select<BR>&nbsp;&nbsp;&nbsp; With grdData3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Row = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Col = 0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RowSel = grdData3.Rows - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ColSel = grdData3.Cols - 1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.Clear<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.SetText .Clip<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Clipboard.GetData<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet2.Range("A1").Select<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet2.Paste<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; '將C欄位全部置中對奇<BR>'&nbsp;&nbsp;&nbsp; myworksheet2.Columns("C:C").Select<BR>'&nbsp;&nbsp;&nbsp; With Selection<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .HorizontalAlignment = xlCenter<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .VerticalAlignment = xlBottom<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .WrapText = False<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Orientation = 0<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .AddIndent = False<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .ShrinkToFit = False<BR>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .MergeCells = False<BR>'&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Clipboard.Clear<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; myworkbook.Sheets("Sheet1").Select</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Call nSetPrintField(iRangeTmp)&nbsp;&nbsp; '設定WorkSheet欄位值<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 'Modify by Natasha 2001/12/28<BR>&nbsp;&nbsp;&nbsp; With myworksheet.PageSetup&nbsp;&nbsp; '每頁皆設定表頭<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .PrintTitleRows = "$1:$2"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .PrintTitleColumns = ""<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .RightHeader = "列印日期：&amp;""Times New Roman,標準""&amp;D" &amp; Chr(10) &amp; "&amp;""新細明體,標準""頁次：&amp;""Times New Roman,標準""&amp;P/&amp;N"<BR>&nbsp;&nbsp;&nbsp; End With<BR>&nbsp;&nbsp;&nbsp; <BR>'&nbsp;&nbsp;&nbsp; myworksheet.Columns("A:I").EntireColumn.AutoFit&nbsp; '調整最適欄?&nbsp;&nbsp;&nbsp; '為了報表美觀一點,加入此行,可調整最為適欄?<BR>'&nbsp;&nbsp;&nbsp; myworksheet.PageSetup.Orientation = xlLandscape&nbsp; '橫印<BR>&nbsp;&nbsp;&nbsp; If iType = "1" Then&nbsp;&nbsp;&nbsp;&nbsp; 'Print<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dlgColor.Filter = "*.xls"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dlgColor.FileName = ""<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dlgColor.ShowSave<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If dlgColor.FileName &lt;&gt; "" Then&nbsp; '取消Save<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworksheet.SaveAs dlgColor.FileName<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox gGetMessage("O1", "儲存"), vbInformation, Me.Caption<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myworkbook.Close<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not RptXls Is Nothing Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If RptXls.Workbooks.count = 0 Then RptXls.Application.Quit<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set RptXls = Nothing<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Preview<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RptXls.Visible = True<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RptXls.ActiveWindow.SelectedSheets.PrintPreview&nbsp;&nbsp;&nbsp; '開啟Preview視窗<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set RptXls = Nothing<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; Screen.MousePointer = 0</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; Exit Sub</DIV>
<DIV>&nbsp;</DIV>
<DIV>ErrHandling:<BR>&nbsp;&nbsp;&nbsp; myworkbook.Close<BR>&nbsp;&nbsp;&nbsp; If Not RptXls Is Nothing Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If RptXls.Workbooks.count = 0 Then RptXls.Application.Quit<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp; Set RptXls = Nothing<BR>&nbsp;&nbsp;&nbsp; Screen.MousePointer = 0<BR>&nbsp;&nbsp;&nbsp; If Err = 20545 Then Exit Sub<BR>&nbsp;&nbsp;&nbsp; MsgBox gGetMessage("00", ""), vbExclamation, Me.Caption<BR>&nbsp;&nbsp;&nbsp; Exit Sub<BR>End Sub<BR></DIV><img src ="http://www.cnitblog.com/oliver_yin/aggbug/3644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-10-28 15:42 <a href="http://www.cnitblog.com/oliver_yin/articles/3644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人网站违规可罚1万元</title><link>http://www.cnitblog.com/oliver_yin/articles/3641.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Fri, 28 Oct 2005 06:50:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/3641.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/3641.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/3641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/3641.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/3641.html</trackback:ping><description><![CDATA[随着互联网的普及，网民数量的不断增加，我国网民已经有9400万人，网站数量有 66.9万个，其中个人网站占了很大的比重。以前，我国对经营性网站管理较多，对非经营性网站一直比较宽松，而最近通过的《非经营性互联网信息服务备案管理办法》，第一次对非经营性网站开出了罚单，一旦违规，管理部门最高可以罚款1万元。这个新规则将于3月20日正式实行。 <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;记者在论坛里也发现不少网友对这个管理办法议论纷纷。对这些疑虑，记者特意采访了浙江省通信管理局市场处的负责人，他们就这个法规做出了详细的解释。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;虚拟世界 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;要纳入社会管理 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;从去年年底到今年年初，有关互联网的法规相继出台，根据《中华人民共和国电子签名法》的授权，信息产业部制定了《非经营性互联网信息服务备案管理办法》、《互联网IP地址备案管理办法》和《电子认证服务管理办法》。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;浙江省通信管理局的负责人说，这个法规只是以前法规的一种细化，“以前我们也要求非经营性网站备案，那个时候是发纸质A的备案书。现在这个程序改变了一下，非经营性网站通过网上申报、网上备案，我们不再颁发纸质的备案书了。” <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;据不完全统计，目前我国的近70万家网站中，有90%的网站都没有做任何官方记录。域名指向在浙江的有7万多个，但在省通信管理局备案和取得ICP资格的只有几千家。很多个人网站、公司网站甚至政府的网站都有这样的心态，反正网站不赚钱，怎么做只是自己的事情。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;这个法规实施后，凡是非经营性网站没有按照要求备案的，按照信业产业部第33号令的第五条和第二十二条，要处以一万元的罚款，并限期改正；如果在规定期限内不改正的，通信管理部门可以关闭该网站。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;3月到6月 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;浙江网站的备案期 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;因为很多网民对信业产业部第33号令还不太了解，浙江省就把网站的备案期延长到夏天。同时，为了方便个人网站和公司网站，省通信管理局还委托互联网接入商来辅助网民完成备案。经过培训，首批互联网服务接入商已经正式可以无偿替网站代理备案，而且，每一个网站都能获得一个唯一的电子证书代码。浙江B电信、 浙江移动、浙江联通、浙江网通、浙江铁通、杭州网通信息港、宁波网通信息港、杭州世导科技公司等8家公司获得了省通信管理局的授权。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;至于个人网站、个人相册、个人blog、公司网站等等是否都是备案的对象，省通信管理局的负责人说：“我们鉴别的标准是这个网站是否有独立域名或者独立IP地址，而且我们的备案完全是免费的，手续也很简便，不会给网民带来太多的麻烦。” <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;不过，对非经营性网站来说，并不是填写真实信息去备案就能万事大吉。法规还要求网站要将备案电子验证标识放置在其网站指定目录下，而且每年还要登陆确认，如果不按照法规操作，通信管理部门的最高罚单可以开到一万元。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;《非经营性互联网信息服务备案管理办法》摘登： <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;第五条 在中华人民共和国境内提供非经营性互联网信息服务，应当依法履行备案手续。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;未经备案，不得在中华人民共和国境内从事非经营性互联网信息服务。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;本办法所称在中华人民共和国境内提供非经营性互联网信息服务，是指在中华人民共和国境内的组织或个人利用通过互联网域名访问的网站或者利用仅能通过互联网IP地址访问的网站，提供非经营性互联网信息服务。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;第二十二条 违反本办法第五条的规定，未履行备案手续提供非经营性互联网信息服务的，由住所所在地省通信管理局责令限期改正，并处一万元罚B款；拒不改正的，关闭网站。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;超出备案的项目提供服务的，由住所所在地省通信管理局责令限期改正，并处五千元以上一万元以下罚款；拒不改正的，关闭网站并注销备案。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;第二十三条 违反本办法第七条第一款的规定，填报虚假备案信息的，由住所所在地省通信管理局关闭网站并注销备案。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;第二十四条 违反本办法第十条、第十八条、第十九条的规定的，由违法行为发生地省通信管理局责令改正，并处一万元罚款。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;第二十五条 违反本办法第十三条的规定，未在其备案编号下方链接信息产业部备案管理系统网址的，或未将备案电子验证标识放置在其网站指定目录下的，由住所所在地省通信管理局责令改正，并处五千元以上一万元以下罚款。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;第二十六条 违反本办法第十四条、第十五条的规定，未在规定时间履行备案变更手续，或未依法履行备案注销手续的，由住所所在地省通信管理局责令限期改正，并处一万元罚款。<img src ="http://www.cnitblog.com/oliver_yin/aggbug/3641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-10-28 14:50 <a href="http://www.cnitblog.com/oliver_yin/articles/3641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用vb自带的打包程序能在桌面生成快捷方式和卸载程序</title><link>http://www.cnitblog.com/oliver_yin/articles/3602.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Thu, 27 Oct 2005 04:28:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/3602.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/3602.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/3602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/3602.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/3602.html</trackback:ping><description><![CDATA[<P style="TEXT-ALIGN: center" align=center><FONT face=新細明體><B><SPAN style="FONT-SIZE: 13pt; COLOR: #0066cc">用<SPAN lang=EN-US>vb自带的打包程序能在桌面生成快捷方式和卸载程序</SPAN></SPAN></B><B><SPAN lang=EN-US style="FONT-SIZE: 13pt; COLOR: red"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></B></FONT></P>
<DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face=新細明體>
<HR align=center width="100%" color=silver noShade SIZE=1>
</FONT></SPAN></DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">vb</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自带的打包程序能在桌面生成快捷方式和卸载程序吗？</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><BR>A :<BR style="mso-special-character: line-break"><BR style="mso-special-character: line-break"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt">1</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">“Package&nbsp; and&nbsp; Deployment&nbsp; Wizard&nbsp; -&nbsp; Start&nbsp; Menu&nbsp; Items”</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">步骤中，选择“</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">New&nbsp; Item”&nbsp; <BR><BR>2</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。标题可以随便写</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp; <BR><BR>3</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Target</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">$(WinPath)\ST6UNST.EXE&nbsp; -n&nbsp; "$(AppPath)\ST6UNST.LOG"&nbsp; <BR><BR>4</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Start&nbsp; in</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">$(WinSysPath)&nbsp; <BR><BR></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装后在开始菜单中就会有卸载一项</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp; <BR>---------------------------------------------------------------&nbsp; <BR></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">“Package&nbsp; and&nbsp; Deployment&nbsp; Wizard&nbsp; -&nbsp; Start&nbsp; Menu&nbsp; Items”</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">步骤中，选择“</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">New&nbsp; Item”</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中可以随便写标题</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp; <BR>Target</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">$(WinPath)\ST6UNST.EXE&nbsp; -n&nbsp; "$(AppPath)\ST6UNST.LOG"&nbsp; <BR>Start&nbsp; in</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">$(WinSysPath)&nbsp; <BR>---------------------------------------------------------------&nbsp; <BR></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序，该程序位于：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">C:\Program&nbsp; Files\Microsoft&nbsp; Visual&nbsp; Studio\VB98\Wizards\PDWizard\Setup1</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp; <BR></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在安装完成时，利用代码在桌面创建一个快捷方式即可（千万不要告诉我说你不会用代码创建快捷方式）。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp; <BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-fareast-language: ZH-CN">---------------------------------------------------------------&nbsp; <BR>VB</SPAN><SPAN lang=ZH-CN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN">展开与打包向导生成的安装程序的工作步骤是这样的：先运行</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-fareast-language: ZH-CN">Setup.exe</SPAN><SPAN lang=ZH-CN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN">，这个程序将</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-fareast-language: ZH-CN">VB</SPAN><SPAN lang=ZH-CN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN">的运行库安装到用户的机器上，然后再调用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; mso-fareast-language: ZH-CN">Setup1.exe</SPAN><SPAN lang=ZH-CN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN">。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.exe</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是由</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">写的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">(</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正是这个原因所以要先安装</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的运行库</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">)</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，其源程序可以在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB98\Wizards\PDWizard\Setup1</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中找到。所以如果你对</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的安装程序不满，就可以直接修改</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.vbp</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。对于你的问题，在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中可以打开</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.vbp</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后修改</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.frm</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Form_Load</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事件，在其中可以找到如下几行：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp; Create&nbsp; program&nbsp; icons&nbsp; (or&nbsp; links,&nbsp; i.e.&nbsp; shortcuts).&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If&nbsp; (fMainGroupWasCreated&nbsp; =&nbsp; True)&nbsp; Or&nbsp; ((cIcons&nbsp; &gt;&nbsp; 0)&nbsp; And&nbsp; TreatAsWin95())&nbsp; Then&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowStaticMessageDialog&nbsp; ResolveResString(resPROGMAN)&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CreateIcons&nbsp; gsICONGROUP&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp; Do&nbsp; the&nbsp; same&nbsp; for&nbsp; other&nbsp; sections&nbsp; in&nbsp; SETUP.LST&nbsp; if&nbsp; you've&nbsp; added&nbsp; your&nbsp; own.&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'CreateIcons&nbsp; "MySection"&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'CreateIcons&nbsp; "MyOtherSection"&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp; If&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">If..&nbsp; End&nbsp; If</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中加上：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OSfCreateShellLink&nbsp; "..\..\Desktop",&nbsp; _&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我的程序</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">",&nbsp; gstrDIR_DEST&nbsp; +&nbsp; "MyProg.exe",&nbsp; "",&nbsp; True,&nbsp; "$(Programs)"&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重新编译</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.vbp</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.exe</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">替换原来的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Setup1.exe</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即可。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">&nbsp; <BR>---------------------------------------------------------------&nbsp; <BR>http://www.cnskye.com/down/show.asp?id=211&amp;page=1&nbsp; <BR>SetupBuilder1.50&nbsp; </SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中文版用这个吧</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">..</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">先用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自带的安装程序制作工具找到程序所用的所有</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Dll</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">Ocx</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">再用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">SetupBuilder</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加工一下</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">..</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">VB</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做的安装界面强得多</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt">..</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 新細明體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">功能也非常强大</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P><img src ="http://www.cnitblog.com/oliver_yin/aggbug/3602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-10-27 12:28 <a href="http://www.cnitblog.com/oliver_yin/articles/3602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再谈在VB中调用VC++开发的DLL(转)</title><link>http://www.cnitblog.com/oliver_yin/articles/3466.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Fri, 21 Oct 2005 06:37:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/3466.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/3466.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/3466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/3466.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/3466.html</trackback:ping><description><![CDATA[<P>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD class=oblog_t_4><SPAN class=style1><FONT size=3><IMG src="http://www.blog.edu.cn/images/face/5.gif">再谈在VB中调用VC++开发的DLL</FONT></SPAN></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV align=right><SPAN class=oblog_text>五月书店 发表于 2005-3-21 10:16:00</SPAN></DIV></TD></TR></TBODY></TABLE><SPAN class=oblog_text><BR>
<DIV class=post>
<DIV class=postTitle><A id=viewpost.ascx_TitleUrl href="http://blog.csdn.net/windsonzhl/archive/2004/02/27/20624.aspx">再谈在VB中调用VC++开发的DLL</A> </DIV>
<DIV class=postText>
<P class=MsoNormal style="TEXT-ALIGN: left" align=left><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　近日开发一个程序，用到动态链接库，在</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN><SPAN style="FONT-FAMILY: 宋体">中调用时遇到了一些问题。我查了一些资料，也看了一下</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">CSDN</SPAN><SPAN style="FONT-FAMILY: 宋体">上的文章，感觉这些文章对在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN><SPAN style="FONT-FAMILY: 宋体">中调用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VC++</SPAN><SPAN style="FONT-FAMILY: 宋体">开发的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">这一问题阐述得不够详细。因此在我的问题得到解决之余，特为初接触</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>的朋友们写下这篇文章。<BR>&nbsp;&nbsp;&nbsp; </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>本文中关于调用约定的解决方法，也适用于解决其它编程语言之间</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>调用的兼容问题。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2><BR>①</FONT></SPAN><FONT size=2><SPAN style="FONT-FAMILY: Arial"> </SPAN></FONT><B><FONT size=2><SPAN style="FONT-FAMILY: 宋体">关于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>的创建与调用<BR></FONT></SPAN></B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　使用</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">VC++</SPAN><SPAN style="FONT-FAMILY: 宋体">的向导即可。具体操作如下：打开菜单“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">File\New</SPAN><SPAN style="FONT-FAMILY: 宋体">”→选择“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Projects\Win32 Dynamic-Link Library</SPAN><SPAN style="FONT-FAMILY: 宋体">”→选择“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">A simple DLL project</SPAN><SPAN style="FONT-FAMILY: 宋体">”即可。这时系统会自动生成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">3</SPAN><SPAN style="FONT-FAMILY: 宋体">个文件：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">*.cpp</SPAN><SPAN style="FONT-FAMILY: 宋体">，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">stdafx.cpp</SPAN><SPAN style="FONT-FAMILY: 宋体">，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">stdafx.h</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　之后将入口函数</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLLMain()</SPAN><SPAN style="FONT-FAMILY: 宋体">补充完整，再添加你自定义的函数的代码。如果你自定义的函数很多，可以将这些函数的声明部分统一写入一个头文件中。再在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">.cpp</SPAN><SPAN style="FONT-FAMILY: 宋体">文件首部用“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">＃i nclude</SPAN><SPAN style="FONT-FAMILY: 宋体">”语句引入这个头文件。注意函数声明前要加上“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__declspec(dllexport)</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>”。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　（如果你建</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">时选择的是第三种类型</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">(</SPAN><SPAN style="FONT-FAMILY: 宋体">加入示例代码</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">)</SPAN><SPAN style="FONT-FAMILY: 宋体">，则在函数声明及定义前都要加上系统定义的宏“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">*_API</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>”。）<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　在</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN><SPAN style="FONT-FAMILY: 宋体">中用如下语句声明：“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Declare Function </SPAN><SPAN style="FONT-FAMILY: 宋体">函数名</SPAN><SPAN style="FONT-FAMILY: Arial"> </SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Lib "</SPAN><SPAN style="FONT-FAMILY: 宋体">完整路径</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">\</SPAN><SPAN style="FONT-FAMILY: 宋体">文件名</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">.dll" [Alias "</SPAN><SPAN style="FONT-FAMILY: 宋体">函数别名</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">"] (ByVal </SPAN><SPAN style="FONT-FAMILY: 宋体">变量</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">1 As </SPAN><SPAN style="FONT-FAMILY: 宋体">类型</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">1, ByVal </SPAN><SPAN style="FONT-FAMILY: 宋体">变量</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">2 As </SPAN><SPAN style="FONT-FAMILY: 宋体">类型</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">2,</SPAN><SPAN style="FONT-FAMILY: 宋体">…</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">) As </SPAN><SPAN style="FONT-FAMILY: 宋体">类型</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">3</SPAN><SPAN style="FONT-FAMILY: 宋体">”，与调用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">API</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>函数类似。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　注意：若在窗体代码的“通用”部分使用，“</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">Declare</SPAN><SPAN style="FONT-FAMILY: 宋体">”前要加“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Private</SPAN><SPAN style="FONT-FAMILY: 宋体">”；若在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Moudle</SPAN><SPAN style="FONT-FAMILY: 宋体">中使用，“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Declare</SPAN><SPAN style="FONT-FAMILY: 宋体">”前要加“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Public</SPAN><SPAN style="FONT-FAMILY: 宋体">”。若将</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">文件放在系统目录（“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">\Windows\System</SPAN><SPAN style="FONT-FAMILY: 宋体">”或“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">\WinNT\System32</SPAN><SPAN style="FONT-FAMILY: 宋体">”）或程序可执行文件所在目录下，“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Lib</SPAN><SPAN style="FONT-FAMILY: 宋体">”后只写出</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>主文件名即可。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　具体的实例代码见④（修正后的，可直接运行）。　<BR><BR></FONT></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: left" align=left><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>②</FONT></SPAN><FONT size=2><SPAN style="FONT-FAMILY: Arial"> </SPAN></FONT><B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>关于入口点<BR></FONT></SPAN></B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　如上编写</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.dll</SPAN><SPAN style="FONT-FAMILY: 宋体">，运行，出现错误信息“找不到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">入口点</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">(Error 53)</SPAN><SPAN style="FONT-FAMILY: 宋体">”。出现这一错误的原因是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">C++</SPAN><SPAN style="FONT-FAMILY: 宋体">编译器在编译时对函数名</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Encrypt</SPAN><SPAN style="FONT-FAMILY: 宋体">作了修改。打开快速查看程序（</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">D:\WINNT\System32\Viewers\QuikView.exe</SPAN><SPAN style="FONT-FAMILY: 宋体">）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">,</SPAN><SPAN style="FONT-FAMILY: 宋体">将</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.dll</SPAN><SPAN style="FONT-FAMILY: 宋体">拖入查看窗口，找到字段</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="mailto:"><SPAN lang=EN-US style="COLOR: windowtext; FONT-FAMILY: 宋体; TEXT-DECORATION: none">“</SPAN><SPAN style="COLOR: windowtext; TEXT-DECORATION: none">?Encrypt@@YAHHH@Z</SPAN></A></SPAN><SPAN style="FONT-FAMILY: 宋体">”</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">,</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>发现函数名被加了一串字符。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　解决方法有二。第一，直接在</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN><SPAN style="FONT-FAMILY: 宋体">声明中将“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">?Encrypt@@Y AHHH@Z</SPAN><SPAN style="FONT-FAMILY: 宋体">”作为别名放在“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Alias</SPAN><SPAN style="FONT-FAMILY: 宋体">”后即可；第二，在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.dll</SPAN><SPAN style="FONT-FAMILY: 宋体">代码中在语句“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__declspec(dllexport) int __stdcall Encrypt(int p, int k);</SPAN><SPAN style="FONT-FAMILY: 宋体">”前加上“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">extern "C" </SPAN><SPAN style="FONT-FAMILY: 宋体">”，编译后，用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">QuikView</SPAN><SPAN style="FONT-FAMILY: 宋体">查看，函数名变为“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">_Encrypt</SPAN><SPAN style="FONT-FAMILY: 宋体">”，之后再在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>声明中做相应调整即可。<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　（对于使用宏的</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">，在“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">#define</SPAN><SPAN style="FONT-FAMILY: 宋体">”语句中，对宏“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher_API</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>”的替换值做更改即可。）<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　进行了③的更改后，程序又找不到入口点了。再用</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">QuikView</SPAN><SPAN style="FONT-FAMILY: 宋体">查看，发现函数名变为</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><A style="COLOR: blue; TEXT-DECORATION: underline; text-underline: single" href="mailto:"><SPAN lang=EN-US style="COLOR: windowtext; FONT-FAMILY: 宋体; TEXT-DECORATION: none">“</SPAN><SPAN style="COLOR: windowtext; TEXT-DECORATION: none">_Encrypt@8</SPAN></A></SPAN><SPAN style="FONT-FAMILY: 宋体">”。还有解决方法。在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.dll</SPAN><SPAN style="FONT-FAMILY: 宋体">工程中添加一个文本文件，命名为“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.def</SPAN><SPAN style="FONT-FAMILY: 宋体">”</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">,</SPAN><SPAN style="FONT-FAMILY: 宋体">添加代码如④。编译后再用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">QuikView</SPAN><SPAN style="FONT-FAMILY: 宋体">查看，函数名变回“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">Encrypt</SPAN><SPAN style="FONT-FAMILY: 宋体">”，在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN><SPAN style="FONT-FAMILY: 宋体">中调用，运行正常。注意使用了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">.def</SPAN><SPAN style="FONT-FAMILY: 宋体">文件，就不需要再使用“</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">extern "C" </SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>”了。<BR><BR></FONT></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: left" align=left><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>③</FONT></SPAN><FONT size=2><SPAN style="FONT-FAMILY: Arial"> </SPAN></FONT><B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>关于调用约定<BR></FONT></SPAN></B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　采用②中第二种解决方法，运行，出现错误信息“</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">DLL</SPAN><SPAN style="FONT-FAMILY: 宋体">调用约定错误</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">(Error 49)</SPAN><SPAN style="FONT-FAMILY: 宋体">”。原因是调用约定共有</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">5</SPAN><SPAN style="FONT-FAMILY: 宋体">种方式：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__fastcall</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__pascal</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__stdcall</SPAN><SPAN style="FONT-FAMILY: 宋体">、</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__cdecl</SPAN><SPAN style="FONT-FAMILY: 宋体">及</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__thiscall</SPAN><SPAN style="FONT-FAMILY: 宋体">（成员函数的调用方式，但不能使用它显示声明一个函数），</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VC++</SPAN><SPAN style="FONT-FAMILY: 宋体">默认调用方式为</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__cdecl</SPAN><SPAN style="FONT-FAMILY: 宋体">，而</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN><SPAN style="FONT-FAMILY: 宋体">默认调用方式则为</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">__stdcall</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>。解决方法是，更改代码如下（指定调用方式）：</FONT></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: left" align=left><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>　　</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>__declspec(dllexport) int __stdcall Encrypt(int p<B>,</B> int k)</FONT><B><FONT size=2>;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></B></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>…………<BR><BR>&nbsp;&nbsp;&nbsp;</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>int __stdcall Encrypt(int p<B>, </B>int k)<BR>&nbsp;</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>int c = p + k</FONT><B><FONT size=2>;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>return c</FONT><B><FONT size=2>;<BR>&nbsp;&nbsp;&nbsp;&nbsp; </FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>}<BR><BR><BR></FONT></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: left" align=left><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>④</FONT></SPAN><FONT size=2><SPAN style="FONT-FAMILY: Arial"> </SPAN></FONT><B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>源代码<BR></FONT></SPAN></B><B><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>Cipher.dll</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>：<BR>&nbsp; </FONT></SPAN></B><B><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.cpp</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>：<BR><BR>&nbsp; </FONT></SPAN></B><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: green">//</SPAN></FONT></SPAN><SPAN style="COLOR: green; FONT-FAMILY: 宋体"><FONT size=2>引入预编译头文件<BR>&nbsp; </FONT></SPAN><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: Arial"><FONT size=2>＃i nclude</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2> <B>“</B>stdafx.h</FONT><B><FONT size=2>”<BR></FONT></B></SPAN><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: Arial"><FONT size=2><BR>&nbsp;&nbsp; #define</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="COLOR: purple; FONT-FAMILY: Arial"> CIPHER_API </SPAN><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: Arial">__declspec</SPAN></FONT><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>(<SPAN style="COLOR: blue">dllexport</SPAN>)</FONT><SPAN style="COLOR: blue"><FONT size=2>&nbsp; <BR><BR>&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: green">//</SPAN></FONT></SPAN><SPAN style="COLOR: green; FONT-FAMILY: 宋体"><FONT size=2>声明我的函数<BR>&nbsp; </FONT></SPAN><SPAN lang=EN-US style="COLOR: purple; FONT-FAMILY: Arial"><FONT size=2>CIPHER_API</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: Arial"> int __stdcall </SPAN><SPAN lang=EN-US style="COLOR: maroon; FONT-FAMILY: Arial">Encrypt</SPAN></FONT><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>( <SPAN style="COLOR: blue">int</SPAN> p<B>,</B> <SPAN style="COLOR: blue">int </SPAN>k )</FONT><B><FONT size=2>;<BR><BR>&nbsp;&nbsp; </FONT></B></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>……<BR><BR>&nbsp; </FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: green">//DLL</SPAN></FONT></SPAN><SPAN style="COLOR: green; FONT-FAMILY: 宋体"><FONT size=2>入口函数<BR>&nbsp; </FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: blue">BOOL</SPAN><SPAN style="COLOR: purple"> APIENTRY </SPAN><SPAN style="COLOR: maroon">DllMain</SPAN>(<SPAN style="COLOR: blue">HANDLE </SPAN><SPAN style="COLOR: gray">hModule</SPAN></FONT><B><FONT size=2>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: blue">DWORD</SPAN> <SPAN style="COLOR: gray">ul_reason_for_call</SPAN></FONT><B><FONT size=2>,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: blue">LPVOID</SPAN> <SPAN style="COLOR: gray">lpReserved</SPAN>)</FONT></SPAN></P>
<P class=MsoNormal style="TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: Arial"><FONT size=2>switch </FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>(<FONT color=#000000><SPAN style="COLOR: gray">ul_reason_for_call</SPAN>)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><FONT color=#000000><SPAN style="COLOR: blue">case </SPAN><SPAN style="COLOR: purple">DLL_PROCESS_ATTACH</SPAN><B>:</B>&nbsp;<BR></FONT></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><FONT color=#000000><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case </SPAN><SPAN style="COLOR: purple">DLL_THREAD_ATTACH</SPAN><B>:</B>&nbsp;<BR></FONT></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><FONT color=#000000><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case </SPAN><SPAN style="COLOR: purple">DLL_THREAD_DETACH</SPAN><B>:</B>&nbsp;<BR></FONT></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><FONT color=#000000><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case </SPAN><SPAN style="COLOR: purple">DLL_PROCESS_DETACH</SPAN></FONT></FONT><B><FONT size=2>:<BR></FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT color=#000000 size=2><SPAN style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break</SPAN></FONT><B><FONT size=2>;<BR></FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: blue"><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>return </SPAN><SPAN style="COLOR: purple">TRUE</SPAN></FONT><B><FONT size=2>;<BR></FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp;&nbsp; }<BR><BR></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: green">&nbsp;&nbsp; //</SPAN></FONT></SPAN><SPAN style="COLOR: green; FONT-FAMILY: 宋体"><FONT size=2>我的函数<BR></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><FONT color=#000000><SPAN style="COLOR: blue">&nbsp;&nbsp; int __stdcall</SPAN><SPAN style="COLOR: maroon"> Encrypt</SPAN>(<SPAN style="COLOR: blue">int</SPAN> <SPAN style="COLOR: gray">p</SPAN><B>,</B> <SPAN style="COLOR: blue">int</SPAN> <SPAN style="COLOR: gray">k</SPAN>)<BR></FONT></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp; &nbsp;{<BR></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue; FONT-FAMILY: Arial"><FONT size=2><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>int</FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2> <FONT color=#000000><SPAN style="COLOR: gray">c</SPAN> = <SPAN style="COLOR: gray">p</SPAN> + <SPAN style="COLOR: gray">k</SPAN></FONT></FONT><B><FONT size=2>;<BR></FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: blue"><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT>return </SPAN><SPAN style="COLOR: gray">c</SPAN></FONT><B><FONT size=2>;<BR></FONT></B></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp;&nbsp; }<BR><BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>……<BR><BR></FONT></SPAN><B><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.def</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>：<BR></FONT></SPAN></B><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp; LIBRARY Cipher<BR></FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>&nbsp; EXPORTS Encrypt<BR></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体"><FONT size=2><BR>编译后，将</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">Cipher.dll</SPAN><SPAN style="FONT-FAMILY: 宋体">复制到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>程序可执行文件所在目录。<BR><BR></FONT></SPAN><B><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>在</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="FONT-FAMILY: Arial">VB</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体"><FONT size=2>中调用：<BR></FONT></SPAN></B><SPAN lang=EN-US style="COLOR: fuchsia; FONT-FAMILY: Arial"><FONT size=2>&nbsp; Option Explicit<BR></FONT></SPAN><SPAN lang=EN-US style="COLOR: fuchsia; FONT-FAMILY: Arial"><FONT size=2>&nbsp; Private</FONT></SPAN><FONT size=2><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Arial"> Declare Function</SPAN><SPAN lang=EN-US style="COLOR: maroon; FONT-FAMILY: Arial"> Encrypt </SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Arial">Lib</SPAN></FONT><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2> <B>“</B>Cipher<B>”</B> </FONT></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>(<SPAN style="COLOR: navy">ByVal</SPAN><SPAN style="COLOR: gray"> p </SPAN><SPAN style="COLOR: navy">As Long</SPAN><STRONG>,</STRONG> <SPAN style="COLOR: navy">ByVal</SPAN><SPAN style="COLOR: gray"> k </SPAN><SPAN style="COLOR: navy">As Long</SPAN>) </FONT><SPAN style="COLOR: navy"><FONT size=2>As Long<BR><BR></FONT></SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2><SPAN style="COLOR: fuchsia">&nbsp; Private</SPAN><SPAN style="COLOR: blue"> </SPAN><SPAN style="COLOR: navy">Sub</SPAN> Form_Load()<BR></FONT></SPAN><FONT size=2><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Arial">&nbsp; Dim</SPAN><SPAN lang=EN-US style="COLOR: gray; FONT-FAMILY: Arial"> c </SPAN></FONT><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Arial"><FONT size=2>As Long<BR></FONT></SPAN><FONT size=2><SPAN lang=EN-US style="COLOR: gray; FONT-FAMILY: Arial">&nbsp; c</SPAN></FONT><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2> = <SPAN style="COLOR: maroon">Encrypt</SPAN>(24<B>,</B> 8)<BR></FONT></SPAN><FONT size=2><SPAN lang=EN-US style="COLOR: gray; FONT-FAMILY: Arial">&nbsp; Text1</SPAN></FONT><SPAN lang=EN-US style="FONT-FAMILY: Arial"><FONT size=2>.<SPAN style="COLOR: gray">Text</SPAN> = </FONT><SPAN style="COLOR: gray"><FONT size=2>c<BR></FONT></SPAN></SPAN><SPAN lang=EN-US style="COLOR: fuchsia; FONT-FAMILY: Arial"><FONT size=2>&nbsp; End Sub</FONT></SPAN></P></DIV></DIV></SPAN></TD></TR></TBODY></TABLE></P><img src ="http://www.cnitblog.com/oliver_yin/aggbug/3466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-10-21 14:37 <a href="http://www.cnitblog.com/oliver_yin/articles/3466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件架构（转并收藏）</title><link>http://www.cnitblog.com/oliver_yin/articles/3460.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Fri, 21 Oct 2005 01:40:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/3460.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/3460.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/3460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/3460.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/3460.html</trackback:ping><description><![CDATA[根据<A class=bluekey href="http://www.yesky.com/key/4747/159747.html" target=_blank>Linda</A> Rising的《Pattern Almanac》一书，已知的架构模式有七十多种。这是一个只多不少的统计，其中包括了很多通常认为是设计模式的模式，比如Bridge，Facade，Interpreter，Mediator等模式通常认为是设计模式，但是在许多情况下，也可以作为架构模式出现，因此也常常被当作架构模式。<BR><BR>　　<B>Layers架构模式</B><BR><BR>　　在<A class=bluekey href="http://www.yesky.com/key/4340/174340.html" target=_blank>收集</A>到用户对软件的要求之后，架构设计就开始了。架构设计一个主要的目的，就是把系统划分成为很多"板块"。划分的方式通常有两种，一种是横向的划分，一种是纵向划分。<BR><BR>　　横向划分将系统按照商业目的划分。比如一个<A class=bluekey href="http://www.yesky.com/key/1561/136561.html" target=_blank>书店</A>的管理系统可以划分成为进货、销售、<A class=bluekey href="http://www.yesky.com/key/633/165633.html" target=_blank>库存</A>管理、员工管理等等。<BR><BR>　　纵向划分则不同，它按照<A class=bluekey href="http://www.yesky.com/key/4805/289805.html" target=_blank>抽象</A>层次的高低，将系统划分成"层"，或叫Layer。比如一个公司的内网管理系统通常可以划分成为下面的几个Layer:<BR><BR>　　一、网页，也就是用户界面，负责显示数据、接受用户输入；<BR><BR>　　二、领域层，包括JavaBean或者COM对象、<A class=bluekey href="http://www.yesky.com/key/4672/134672.html" target=_blank>B2B</A>服务等，封装了必要的商业<A class=bluekey href="http://www.yesky.com/key/3446/223446.html" target=_blank>逻辑</A>，负责根据商业逻辑决定显示什么数据、以及如何根据用户输入的数据进行计算；<BR><BR>　　三、数据库，负责存储数据，按照查询要求提供所存储的数据。<BR><BR>　　四、操作系统层，比如Windows NT或者Solaris等<BR><BR>　　五、硬件层，比如SUN E450服务器等<BR><BR>　　有人把这种Layer叫做Tier，但是Tier多带有<A class=bluekey href="http://www.yesky.com/key/365/180365.html" target=_blank>物理</A>含义，不同的Tier往往位于不同的计算机上，由网络连接起来，而Layer是纯粹逻辑的概念，与物理划分无关。 <BR><BR>　　Layers架构模式的好处是：<BR><BR>　　第一、任何一层的变化都可以很好地局限于这一层，而不会影响到其他各层。<BR><BR>　　第二、更容易容纳新的技术和变化。Layers架构模式容许任何一层变更所使用的技术<BR><BR>　　<B>Fa?ade架构模式</B><BR><BR>　　外部与一个子系统的通讯必须通过一个统一的门面（Facade）对象进行，这就是Facade模式。<BR><BR>　　现代的软件系统都是比较复杂的，设计模式的任务就是协助设计师处理复杂系统的设计。<BR><BR>　　设计师处理复杂系统的一个常见方法便是将其"分而治之"，把一个系统划分为几个较小的子系统。但是这样做了以后，设计师往往仍然会发现一个子系统内仍然有太多的类型要处理。而使用一个子系统的使用端往往只关注一些特定的功能，却要同时与子系统内部的许多对象打交道后才能达到目的，请见下面的对象图。<BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG src="http://dev.yesky.com/imagelist/05/06/a87695fj2vm9.gif" border=0><BR>图4、Facade架构模式的结构图。</DIV></TD></TR></TBODY></TABLE><BR>　　这就是一种不便，它使得系统的逻辑变得不必要的复杂，维护成本提高，复用率降低。<BR><BR>　　用一个范例说明，中国<A class=bluekey href="http://www.yesky.com/key/3161/168161.html" target=_blank>大陆</A>的<A class=bluekey href="http://www.yesky.com/key/3390/138390.html" target=_blank>医院</A>便是一个子系统，按照部门职能，这个系统可以划分为挂号、门诊、划价、化验、收银、取药等。看病的病人要与这些部门打交道，就如同一个子系统的使用端与一个子系统的各个类型打交道一样，不是一件容易的事情。<BR><BR>　　首先病人必须先挂号，然后门诊。如果医生要求化验，病人必须首先划价，然后缴款，才能到化验部门做化验。化验后，再回到门诊室，请见下面的对象图。<BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG src="http://dev.yesky.com/imagelist/05/06/ho315ggk8hk0.jpg" border=0><BR>图5、描述病人在医院里的体验。图中的方框代表医院。 </DIV></TD></TR></TBODY></TABLE><BR>　　解决这种不便的方法便是引进Facade模式。仍然通过医院的范例说明，可以设置一个接待员的位置，由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是Facade模式的体现，病人只接触接待员，由接待员负责与医院的各个部门打交道，请见下面的对象图。<BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG src="http://dev.yesky.com/imagelist/05/06/631z3q347q41.jpg" border=0><BR>图6、描述经过Facade模式的<A class=bluekey href="http://www.yesky.com/key/3989/148989.html" target=_blank>改装</A>后，病人在医院里的体验。图中的方框代表医院。</DIV></TD></TR></TBODY></TABLE><BR>　　Facade模式要求一个子系统的外部与其内部的通讯必须通过一个统一的门面（Facade）对象进行。Facade模式提供一个<A class=bluekey href="http://www.yesky.com/key/4920/184920.html" target=_blank>高等</A>级的接口，使得子系统更易于使用。<BR><BR>　　使用了Facade模式之后，本章的第一个图中所描述的一个子系统的使用端对象所面对的复杂关系就可以简化为下面这个样子。 <BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG src="http://dev.yesky.com/imagelist/05/06/4j1k41qbnf7h.gif" border=0><BR>图7、Facade架构模式的结构图</DIV></TD></TR></TBODY></TABLE><BR>　　描述经过Facade模式的改装后，一个子系统的使用端与子系统的关系。图中的大方框代表一个子系统。<BR><BR>　　就如同医院的接待员一样，Facade模式的门面类型将使用端与子系统的内部复杂性分隔开，使得使用端只需要与门面对象打交道，而不需要与子系统内部的很多对象打交道。<BR><BR>　　<B>Mediator架构模式</B><BR><BR>　　Mediator模式包装了一系列对象相互作用的方式，使得这些对象不必互相明显参照；从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时，不会立即影响到其它的一些对象之间的相互作用；从而可以保证这些相互作用可以彼此独立地变化。 <BR><BR>　　在下面的示意图中有大量的对象，这些对象既会影响别的对象，又会被别的对象所影响，因此常常叫做同事（Colleague）对象。这些同事对象通过彼此的相互作用形成系统的行为。从图中可以看出，几乎每一个对象都需要与其它的对象发生相互作用，而这种相互作用表现为一个对象与另一个对象的直接耦合。<BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG src="http://dev.yesky.com/imagelist/05/06/u3xb76t989n9.gif" border=0><BR>图8、这是一个过度耦合的系统</DIV></TD></TR></TBODY></TABLE><BR>　　通过引入调停者对象（Mediator），可以将系统的网状结构变成以中介者为中心的星形结构，如下图所示。在这个星形结构中，同事对象不再通过直接的联系与另一个对象发生相互作用；相反地，它通过调停者对象与另一个对象发生相互作用。调停者对象的存在保证了对象结构上的稳定，也就是说，系统的结构不会因为新对象的引入造成大量的修改工作。 <BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG src="http://dev.yesky.com/imagelist/05/06/ty1x3qa272mo.gif" border=0><BR>图9、这是一个使用了Mediator架构模式之后的结构图</DIV></TD></TR></TBODY></TABLE><BR>　　比较传统的设计方法，面向对象的技术可以更好地协助设计师管理更为复杂的系统。一个好的面向对象的设计可以使对象之间增加协作性（Collaboration），减少耦合度（<A class=bluekey href="http://www.yesky.com/key/2395/162395.html" target=_blank>Coupling</A>）。一个深思熟虑的设计会把一个系统分解为一群相互协作的同事对象，然后给每一个同事对象以独特的责任，恰当的配置它们之间的协作关系，使它们可以在一起工作。<BR><BR>　　在Mediator模式中，所有的成员对象都可以协调工作，但是又不直接相互管理。这些对象都与一个处于中心地位的调停者对象发生紧密的关系，由这个调停者对象进行协调工作。这个协调者对象叫做调停者（Mediator），而调停者所协调的成员对象称做同事（Colleague）对象。<BR><BR>　　<A class=bluekey href="http://www.yesky.com/key/193/200193.html" target=_blank>在C</A>olleague对象内部发生的事件会影响到所有的同事，但是这种影响不是以直接管理的方式直接传到其它的对象上的。记住在小组的成员增加时，这样的相互作用关系是以比指数更快的方式增加的。相反，这种影响仅仅直接影响到调停者对象，而调停者对象反过来会协调其它的同事，形成整个系统的行为。<BR><BR>　　如果小组的成员增加时，调停者对象可能会面临修改，而其它的同事则可以装做不知道这个新的成员一样，不必修改。反过来，如果小组的成员之一被从系统中删除的话，调停者对象需要对此做出修改，而小组中其它的同事则不必改动。<BR><BR>　　<B>Interpreter架构模式</B><BR><BR>　　给定一个语言之后，Interpreter模式可以定义出其文法的一种表示，并同时提供一个直译器；使用端可以使用这个直译器来解释这个语言中的句子。<BR><BR>　　如果某一类型问题一再地发生的话，那么一个有意义的做法就是将此类型问题的各个实例表达为一个简单语言中的语句。这样就可以建造一个直译器，通过解释这些语句达到解决问题的目的。<BR><BR>　　例如，依照一个匹配模式搜寻字符串便是一个常见的问题。与其为每一个匹配模式建造一个特定的算法，不如建造一个一般性的算法处理各种常规表达式。当接到一个指定的常规表达式时，系统使用一个直译器解释这个常规表达式，从而对字符串进行匹配。<BR><BR>　　再比如<A class=bluekey href="http://www.yesky.com/key/1069/136069.html" target=_blank>VBA</A>（Visual <A class=bluekey href="http://www.yesky.com/key/2906/137906.html" target=_blank>Basic</A> for Applications）就不仅仅出现在微软的Office系列软件中，并且可以供第三<A class=bluekey href="http://www.yesky.com/key/2945/157945.html" target=_blank>厂家</A>出产的软件嵌入使用；Crystal <A class=bluekey href="http://www.yesky.com/key/920/165920.html" target=_blank>Reports</A>报表生成软件也包括了一个便于使用的宏语言，使用户可以执行较为复杂的命令操作。一般而言，将VBA或者其它的语言软件嵌入到自己的<A class=bluekey href="http://www.yesky.com/key/3887/173887.html" target=_blank>软件产品</A>中，可以使产品定制化（Customization）能力大大增强，但是这些宏语言引擎往往都很昂贵。<BR><BR>　　现在要介绍的Interpreter模式将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。熟悉了这个模式以后，一个没有接收过形式语言和编译器的正规训练的设计师也可以自行设计一个简单的直译器，以便为使用端提供一个简单语言，或者在系统内部使用一个简单语言描述一个合适的问题。<BR><BR>　　<B>语言、直译器和剖析器</B><BR><BR>　　Interpreter模式只描述直译器是怎样工作的，并不指明怎样在执行时创建新的直译器。虽然广义地讲直译器不一定要有一个剖析器（Parser），但是使用剖析器仍然是最常见的建立直译器的办法。一个剖析器可以从一个档或命令行读入文字性命令，并创建直译器。<BR>剖析器是一种能够识别文字并将文字按照一定规则进行分解以便进一步处理的对象。剖析器能够识别的字符串叫做语言。通常建立的小型计算机语言是与环境无关的语言，也就是遵循一定的文法的文字模式，所谓文法，便是决定怎样将语言的元素组合起来的规则的集合。剖析器便是根据组合规则将字符串分解的。<BR><BR>　　抽象地讲，语言并不一定是以字符串的形式表达的。在Interpreter模式里面所提到的语言是指任何直译器对象能够解释的任何组合。在Interpreter模式中，需要定义一个代表文法的命令类型的等级结构，也就是一系列的组合规则；每一个命令对象都有一个解释方法，代表对命令对象的解释。<BR><BR>　　命令对象的等级结构中的对象的任何排列组合都是一个语言，而剖析器的工作便是将一个文字性语言翻译成为等效的直译器语言。因此，直译器往往需要剖析器。<BR><BR>　　<B>认识Jack吗</B>？<BR><BR>　　剖析器生成器（Parser Generator），常常称为编译器的编译器（Compiler Complier）。Sun Microsystem提供一个专为Java程序员发明的强大的剖析器生成器，最初叫做Jack，后来改名为JavaCC。<BR><BR>　　要使用JavaCC，必须使用它提供的脚本语言<A class=bluekey href="http://www.yesky.com/key/4285/189285.html" target=_blank>编写</A>一个脚本，然后执行JavaCC生成Java源代码。这生成的源代码就是所需的剖析器。现在Sun已经不再负责JavaCC的研发，对JavaCC感兴趣的读者可以从http://www.experimentalstuff.com/Technologies/JavaCC得到免费的JavaCC和相关数据。<BR><BR>　　JavaCC最早命名为Jack是为了与一个早就广泛使用的剖析器生成器YACC谐音。如果读者已经熟悉了YACC，可以使用YACC达到同样的目的；只是相比之下JavaCC更容易得到Java程序员的喜爱。<BR><img src ="http://www.cnitblog.com/oliver_yin/aggbug/3460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-10-21 09:40 <a href="http://www.cnitblog.com/oliver_yin/articles/3460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MATLAB对高等数学学习的有益帮助(转)</title><link>http://www.cnitblog.com/oliver_yin/articles/2844.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Fri, 23 Sep 2005 04:34:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/2844.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/2844.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/2844.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/2844.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/2844.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">MATLAB软件是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统环境。作为一个人机交互的数学系统环境，它拥有一个强大的数学函数库（包括各种初等函数的算法，也包括矩阵运算、矩阵分析等高层次数学算法），内容集中了日常数学处理中的各种功能，包括高效的数值计算、矩阵运算、信号处理和图形生成等功能。与利用C语言或FORTRAN语言作数值计算的程序设计相比，MATLAB使用非常方便，可以节省大量的编程时间。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">初次接触<SPAN lang=EN-US>MATLAB是在控制课上，当时就感叹它在工程领域的强大作用。随着逐渐的接触和熟悉，慢慢的发现数学计算功能才是它得以迅速发展的根本原因。而我本身对高等数学的学习总是不甚理想。因此，自然而然的想到用MATLAB来帮助自己。在慢慢的结合过程中，我发现MATLAB在验证复杂矩阵运算、进行科学运算和函数图像分析等方面都有很大的作用，对我的帮助不小。下面就这三个方面的作用<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">1、验证矩阵运算<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">我们都做过矩阵的运算，大概都会有一种感受，就是繁杂。对于多行多列的矩阵运算，更是容易出错。如何来检验学习效果呢，这就需要验证结果。参考书的答案难免出现错误，而且如果是实际问题的话，又哪来的参考答案呢？还有一种方法，那就是自己编程解决。可是实在太麻烦了。例如说在考虑两个矩阵<SPAN lang=EN-US> A 和 B 的乘积问题时，在 C 语言中实现就并不仅仅是一组双重循环的问题。双重循环当然是矩阵乘积所必需的，除此之外要考虑的问题很多：A 和 B 有一个是复数矩阵怎么考虑；其中一个是复数矩阵时怎么考虑；全部是实系数矩阵时又怎么管理；这样就要在一个程序中有4个分支，分别考虑这 4 种情况。然后还得判断这两个矩阵是否可乘。所以说，没有一定时间，用 C 语言不可能编写出考虑各种情况的子程序。然而有了 MATLAB 这样的工具，问题就变得非常简单了。我们只需打开MATLAB,在命令窗口执行简单的操作便能完成运算。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例如：计算<SPAN lang=EN-US>A*B，其中A= 1 2 3 <SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>B= 3 4 5 <o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>7 8 9 <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>6 7 8<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>5 4 3 <SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>8 9 4<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在<SPAN lang=EN-US>MATLAB的命令窗口中键入<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; A=[1 2 3;7 8 9;5 4 3];</SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; B=[3 4 5;6 7 8;8 9 4];</SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; A.*B<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">ans =<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>8<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>15<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>42<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>56<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>72<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>40<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>36<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>12<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">其中“<SPAN lang=EN-US>A=[1 2 3;7 8 9;5 4 3]； B=[3 4 5;6 7 8;8 9 4];”为负值语句，矩阵内的行用“；”隔开。A.*B代表A*B。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这个例子很简单，但足以说明要表达的意思。<SPAN lang=EN-US>MATLAB可以完成你所需要的任何矩阵运算，还包括一些常用的变换。以后再遇见多行多列的复杂矩阵运算时，我们就可以不用劳神了，有了MATLAB一切轻松解决。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">2、科学运算<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">常见的正弦，余弦，正切，与切等计算，一般的编程语言就能实现，甚至复杂一点的计算器也可以解决。但是他们能做求导，积分运算吗？我想是很困难的。而<SPAN lang=EN-US>MATLAB利用其符号运算工具箱可以对该函数进行解析推导，得出诸如高阶导数、积分、Taylor 幂级数展开等。利用diff(),simple(),taylor()等函数，推导的结果可以直接得到。在一些题目中，我们首先要确定解题方向，然后再具体解决。可以利用MATLAB对我们的思考方向作一些推测，看是否符合题目要求。这样，可以节省我们的大量计算时间，对正确把握题目要求，确定做题方向有很好的帮助。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例如在计算某函数的极值时，可以利用求导来解决。可是存在的函数本身很复杂，求导起来非常麻烦。利用<SPAN lang=EN-US>MATLAB的解析推导，问题迎刃而解。下面的例子说明了在MATLAB中求导过程的简单。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例：<SPAN lang=EN-US><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_i1025 style="WIDTH: 66.75pt; HEIGHT: 18pt" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.wmz"></v:imagedata></v:shape><o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">求导<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; syms x;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; f=x.^3*sin(x);<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; diff(f)<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">ans =<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">3*x^2*sin(x)+x^3*cos(x)</SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">“<SPAN lang=EN-US>syms x”定义了一个变量x ,diff()是求导函数。具体用法可以在帮助中获取。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">求二阶导数<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; syms x;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; f=x.^3*sin(x);<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; diff(f,x,2)<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">ans =<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">6*x*sin(x)+6*x^2*cos(x)-x^3*sin(x)</SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">3、画图<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在高等数学的学习中，我们常常面临一些有关图形的问题。有些需要我们画出准确的图形，再对其仔细分析；有些图形本身是由表达式给出的，常常超出我们的想象，根本不知其所型；还有一些可以想象出来，却因绘图能力不及难以描绘。这些难处都影响了我们的正常学习。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">用<SPAN lang=EN-US> C 这类语言，绘制图形也是一个难点。但使用 MATLAB 这类高级语言，完成这样的工作就是几个直观语句的事。且得出的图形美观准确、可以将语句毫不变化地移植到另外的机器上，得出完全一致的结果，如下所示。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例：做出<SPAN lang=EN-US><v:shape id=_x0000_i1026 style="WIDTH: 90.75pt; HEIGHT: 18pt" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image003.wmz"></v:imagedata></v:shape>的图 <o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在<SPAN lang=EN-US>MATLAB中键入：<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; X=-2:0.01:2;<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; Y=X.^3-X.^2-X+1;<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">&gt;&gt; plot(X,Y)<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><o:p>&nbsp;</P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">较复杂的例子来自<SPAN lang=EN-US>MATLAB的3-D DEMO。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">〉〉<SPAN lang=EN-US>z=peaks(25);<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; BACKGROUND: silver; FONT-FAMILY: 宋体; mso-highlight: silver">〉〉<SPAN lang=EN-US>mesh(z);<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=hz><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">非常简单，仅仅几个命令就直观的显示出来了。（注意大小写，<SPAN lang=EN-US>MATLAB对大小写是敏感的）<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><BR style="mso-ignore: vglayout" clear=all><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">可以看到<SPAN lang=EN-US>MATLAB在画图方面，功能是非常强大的。不仅平面图可以画，立体图也可以画。还可以依据你的要求画出点状分布、直方图等。你能想到的，它基本上都能满足你了。只要你需要这样的一个直观表现，MATLAB可以轻而易举的帮你实现。<BR><o:p></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">讲了这么多，一直都是泛泛而谈。一方面是<SPAN lang=EN-US>MATLAB的功能实在太强大，难以一一详尽，再者我也不愿将这篇短文变成MATLAB的纸版帮助。（详尽的使用说明在MATLAB里都可以找到）我只是将我使用MATLAB的<v:shape id=_x0000_s1027 style="MARGIN-TOP: 7.8pt; Z-INDEX: 2; LEFT: 0px; MARGIN-LEFT: 45pt; WIDTH: 234pt; POSITION: absolute; HEIGHT: 175.5pt; TEXT-ALIGN: left" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\03\clip_image007.emz" grayscale="t"></v:imagedata><?xml:namespace prefix = w ns = "urn:schemas-microsoft-com:office:word" /><w:wrap type="topAndBottom"></w:wrap></v:shape>一些体会写在这里。<o:p></o:p></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><SPAN class=hz><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于数学我一直是敬畏的。学习的过程中总是出现这样、那样的困难。，有了<SPAN lang=EN-US>MATLAB，问题多少有了改变。不敢说，从此数学学习路途一帆风顺，但最起码，在这条路上又多了一个可信的助手！听说在美国的一些大学里，MATLAB是攻读学位的大学生、硕士生、博士生必须掌握的基本工具。它正成为对数值线性代数以及其他一些高等应用数学课程进行辅助教学的有益工具。我希望同学们也能尽快的认识和利用MATLAB，在数学学习方面有所帮助。</SPAN></SPAN></SPAN></P></o:p></SPAN></SPAN></SPAN></o:p></SPAN></SPAN><img src ="http://www.cnitblog.com/oliver_yin/aggbug/2844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-09-23 12:34 <a href="http://www.cnitblog.com/oliver_yin/articles/2844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言实现MATLAB 6.5中M文件的方法(转)</title><link>http://www.cnitblog.com/oliver_yin/articles/2833.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Thu, 22 Sep 2005 10:43:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/2833.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/2833.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/2833.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/2833.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/2833.html</trackback:ping><description><![CDATA[摘要：本文着重描述了运用MATLAB命令将M文件翻译为C语言程序，并修改为可直接调用的C语言函数的方法，使用该方法所需要注意的方法局限性和MATLAB版本差异的影响。运用该方法将能够使C语言能直接使用MATLAB当中已经完成的数学计算功能，大大扩充了C语言的数学计算功能和开发效率。
<P>　　关键词：MATLAB；M文件；C语言接口 </P>
<P>　　众所周知，MATLAB是一个功能强大的数学软件，擅长于用矩阵运算完成各种数学功能。但是其程序需要在MATLAB环境下解释执行，效率不高。如果能将它强大的函数库用于C语言，利用C来编译执行，MATLAB将能发挥更大的作用。所以，MATLAB从5.0开始已经提供了与外部C/C++程序的应用程序接口，为利用C语言调用MATLAB的函数提供了可能。但是MATLAB的接口发展很快，到MATLAB 6.5已经提供了对VC 7.0的支持，同时对C的接口相对于5.X版本有了一定的改变。</P>
<P>　　在MATLAB当中，我们利用M文件来实现函数，每一个M文件实现一个单独的功能，这一点和C语言当中的函数是相互对应的。所以，如果我们能将MATLAB中的M文件转化为C语言下的一个单个函数，就能实现MATLAB中相应的功能。</P>
<P>　　实现方法</P>
<P>　　整个过程可分为三个主要部分，用MATLAB将M文件翻译为C语言文件，从生成的C语言文件提取出有用语句，编写数据转换程序实现参数格式转换。整个过程最终将把M文件翻译成C语言当中的一个具有相同功能的函数，供其它的程序调用。</P>
<P>　　本文用一个最简单的M文件来示例：</P>
<P>　　文件名：messay.m</P>
<P>function c=messay()<BR>a=3.4;<BR>b=5.6;<BR>c=sqrt(a)+sqrt(b); </P>
<P>　　该m文件实现了计算 </P>
<P>　　1、将M文件编译为C语言文件</P>
<P>　　为了将M文件翻译为C语言文件，需要进行一定的设置，这里假设编写C语言的环境为VC6.0，在MATLAB命令提示符下输入mex -setup和mbuild -setup命令，在相应选项中选择Microsoft Visual C/C++即可。</P>
<P>　　在MATLAB命令行中使用mcc命令将messay.m翻译为C代码。</P>
<P>mcc -m messay.m </P>
<P>　　其中的参数-m代表mcc命令将把m文件翻译成C语言的代码。</P>
<P>　　翻译命令将在messay.m所在的文件夹下生成三个C语言文件：messay.h，messay.c和messay_main.c。其中messay_main.c提供了main()函数；messay.h提供了整个程序的函数声明；messay.c包含了MATLAB生成的功能函数。这三个文件当中，messay.c中包含了我们所需要的数学函数。</P>
<P>　　2、提取有用语句</P>
<P>　　通过分析，发现由mcc生成的代码内部参数传送方式由MATLAB链接库规定，难以改动，因此需要提取有用的代码，并更改生成代码的参数传递方式。同时从生成代码的注释中可以看出，真正蕴含M文件功能实现的代码段都在Mmessay()函数当中（该函数名的默认构造方式为前缀M加上M文件的文件名），而其它的生成函数仅实现参数传递和标准化接口服务的功能。</P>
<P>　　所以提取代码的具体方法是利用messay.c当中生成的static mxArray * Mmessay(int nargout_)函数，对该函数进行修改，而其他的生成函数都可以忽略不用。原生成的Mmessay()代码如下：</P>
<P>static mxArray * Mmessay(int nargout_) {<BR>　mexLocalFunctionTable save_local_function_table = mclSetCurrentLocalFunctionTable(&_local_function_table_messay);<BR>　mxArray * c = NULL;<BR>　mxArray * b = NULL;<BR>　mxArray * a = NULL;<BR>　mlfAssign(&a, _mxarray0_);<BR>　mlfAssign(&b, _mxarray1_);<BR>　mlfAssign(&c, mclPlus(mlfSqrt(mclVv(a, "a")), mlfSqrt(mclVv(b, "b"))));<BR>　mclValidateOutput(c, 1, nargout_, "c", "messay");<BR>　mxDestroyArray(a);<BR>　mxDestroyArray(b);<BR>　mclSetCurrentLocalFunctionTable(save_local_function_table_);<BR>　return c;<BR>} </P>
<P>　　在生成代码当中，mclSetCurrentLocalFunctionTable和mclSetCurrentLocalFunctionTable函数为两个外部函数，将参数传给外部，与其相关的部分都对C程序使用数学函数没有影响。最终实际有用并执行运算的只有一句：</P>
<P>mlfAssign(&c, mclPlus(mlfSqrt(mclVv(a, "a")), mlfSqrt(mclVv(b, "b")))); </P>
<P>　　实际上，由MATLAB翻译的C语句中，大部分的和实际计算有关的语句和自生成的函数都以mlf开头，所以寻找有用语句的简单方法就是直接寻找mlf为前缀的代码。</P>
<P>　　3、参数格式转换</P>
<P>　　应当指出，MATLAB所有的计算都是基于一种名为mxArray的数据结构之上的，所有的浮点数、向量或者是矩阵在MATLAB当中都是通过mxArray结构来进行存储和传递的。当然，MATLAB所提供的所有数学函数也都是基于这样一种数据结构进行运算的。所以，要使用MATLAB的生成代码，就必须将C语言当中常用的浮点数和整数转换为mxArray结构。</P>
<P>　　本例中利用MATLAB函数mxArray *mlfScalar(double v)和函数double *mxGetPr(mxArray *)来实现参数格式转换。函数mlfScalar()将double型变量存入一个新建的mxArray结构中，并返回指针，而函数mxGetPr()将mxArray结构保存的实数的实部取出。至于其它参数转换方法可参看参考文献3中的相关部分。</P>
<P>　　最终可以编写这样一个利用了MATLAB数学函数并实现计算的函数：</P>
<P>double Mmessay(double ina, double inb) {<BR>　mxArray *a,*b,*c; //三个用于MATLAB数学函数计算的参数<BR>　double *outc; //计算结果变量 <BR>　a=mlfScalar((double)ina); //利用mlfScalar()进行类型转换<BR>　b=mlfScalar((double)inb);<BR>　mlfAssign(&c, mclPlus(mlfSqrt(mclVv(a, "a")), mlfSqrt(mclVv(b, "b"))));<BR>　outc=mxGetPr(c); //c获得结果的实部，即结果<BR>　mxDestroyArray(a); //释放空间<BR>　mxDestroyArray(b);<BR>　mxDestroyArray(c);<BR>　return *outc;<BR>} </P>
<P>　　到此，整个翻译过程完成，但是还不能直接调用。在这个函数当中运用到了MATLAB的数学库函数mlfSqrt()、mlcPlus()和数据转换函数mlfScalar()、mxGetPr()。由于这些函数是固化在链接库当中的，为了连接执行，必须加入几个库文件和几个静态链接库lib文件。所需要的库文件为mcc命令生成的messay.c文件当中所加入的库文件，一般为libmatlb.h，而需要加入的静态链接库文件如下：</P>
<P>libmat.lib，libmatlb.lib，libmex.lib，libmx.lib </P>
<P>　　如果没有以上文件，可以用VC的lib命令将MATLAB相应的def文件转化为lib文件，转化格式为lib /def:filename.def /machine:ix86 /out:filename.lib。</P>
<P>　　方法的局限</P>
<P>　　使用本文所用的方法可以将M文件翻译为C语言的函数，但是要受到两个因素的制约。</P>
<P>　　1、功能的实现受到MATLAB C函数库的限制</P>
<P>　　这种翻译的机制是由MATLAB提供的，mcc命令能直接翻译的函数也仅局限于MATLAB原有的函数。因为这些函数已经被MATLAB6.5编译好，一般以mlf为前缀，存于动态链接库当中并可被C语言直接调用。这些函数在参考文献4中可以查到。而超出了这个范围的函数，并在M文件当中被嵌套使用，在用mcc进行翻译的时候，mcc将在函数名前加上前缀mlf，并进一步翻译该函数。</P>
<P>　　但是，这种翻译受到MATLAB参数传递的限制，而不能直接调用，在编译时会出现找不到相应的外部函数的错误。解决办法是手动将所有被翻译的函数进行参数传递方式的调整。如果M文件当中包含的函数被嵌套翻译的层数很深，这样的工作量是巨大而且不可接受的。 <BR>同时很多工具箱当中定义的函数也是不能使用这种方法进行翻译的。MATLAB的工具箱更新速度很快，而相应的MATLAB C的函数库有一定滞后，导致很多最新的工具箱当中的函数是不能被翻译的。</P>
<P>　　2、翻译本身存在的限制</P>
<P>　　因为这种翻译是遵守C语言要求的，因而对于内存分配要求和C语言不同的函数和一些关于图形显示类型的函数（包括大量的GUI相关函数）也不能被正确的翻译。例如mash.m和step.m这两个较常用的MATLAB函数，由于上述的限制，就不能用本方法进行翻译。</P>
<P>　　对于上述的问题，可以利用在C程序当中运用MATLAB引擎的方法动态调用MATLAB的库函数，基本上可以解决上述所有的函数不能被正确翻译和图形显示的问题。但是，运用MATLAB引擎的方法需要利用ActiveX的自动化服务器，在运行的时候程序会在后台执行一个MATLAB的线程而不能完全脱离MATLAB的环境，也就意味着在纯C的环境下是不能运用的，必须要先安装MATLAB并能够在运行时支持多线程工作。具体的方法可以参阅参考文献3。</P>
<P>　　MATLAB 5.X和MATLAB 6.5的区别</P>
<P>　　对于本方法有以下几点区别需要注意：</P>
<P>　　(1)程序当中所需的库文件由5.X版本的matrix.h、mcc.h、matlab.h改为mex.h、libmatlb.h、libmatlbm.h等库文件。</P>
<P>　　(2)程序所需要加入的静态链接库文件由5.X需要的libmmfile.lib、libmatlb.lib、libmcc.lib、libmx.lib改为libmat.lib、libmatlb.lib、libmex.lib、libmx.lib四个文件。</P>
<P>　　(3)API函数改动很多，虽然数学函数库即mlf前缀的函数少有改动，但是关于变量建立，内存管理和数据类型转换的函数发生改变，即很多原mcc前缀的函数改为用mx为前缀的函数代替，使得很多5.X翻译的C程序代码不能在6.5相应的库下运行通过。</P>
<P>　　(4)6.5版本中直接增加了在VC环境下对M文件的支持。在执行mbuild -setup的配置命令后，MATLAB在VC中提供了MATLAB Project Wizard，可在VC环境下直接建立MATLAB的工程来翻译M文件。但是这种翻译方法在遇到未定义函数嵌套时将错误的把函数名翻译为变量名，而mcc命令将进一步翻译内部嵌套的函数。<BR></P><BR><img src ="http://www.cnitblog.com/oliver_yin/aggbug/2833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-09-22 18:43 <a href="http://www.cnitblog.com/oliver_yin/articles/2833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在.NET中应用MATLAB算法(转)</title><link>http://www.cnitblog.com/oliver_yin/articles/2832.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Thu, 22 Sep 2005 10:42:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/2832.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/2832.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/2832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/2832.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/2832.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在.NET中应用MATLAB算法MATLAB算法是一个优秀的算法，我们在软件开发过程中，尤其是数据库开发方面，要进行数据汇总、统计分析、然后根据汇总的数据产生图表（包括柱图、饼图、四分图、雷达图等），这种需求甚为普遍。由于MATLAB算法具有强大的计算处理功能，所以在许多软件中已经用到它，比如作个销售预测，前提是基于以往的销售数据，可以用MATLAB算法对以往的销售数据进行处理（如函数、矩...&nbsp;&nbsp;<a href='http://www.cnitblog.com/oliver_yin/articles/2832.html'>阅读全文</a><img src ="http://www.cnitblog.com/oliver_yin/aggbug/2832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-09-22 18:42 <a href="http://www.cnitblog.com/oliver_yin/articles/2832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP解决Jmail发邮件乱码问题。</title><link>http://www.cnitblog.com/oliver_yin/articles/2649.html</link><dc:creator>生活像一团麻</dc:creator><author>生活像一团麻</author><pubDate>Wed, 14 Sep 2005 00:41:00 GMT</pubDate><guid>http://www.cnitblog.com/oliver_yin/articles/2649.html</guid><wfw:comment>http://www.cnitblog.com/oliver_yin/comments/2649.html</wfw:comment><comments>http://www.cnitblog.com/oliver_yin/articles/2649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/oliver_yin/comments/commentRss/2649.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/oliver_yin/services/trackbacks/2649.html</trackback:ping><description><![CDATA[<P>以下为ASP代码<BR>--------------------------------------------------------------------<BR>Set ojmail = Server.CreateObject("jmail.Message") '建立物件 '<BR>oJmail.From = "<A href="mailto:park@xxx.com">park@xxx.com</A>" '設定寄件人的E-MAIL地址<BR>Jmail.Charset = "Big5" <BR>oJmail.ContentType = "text/html" '郵件正文格式<BR>oJmail.AddRecipient "<A href="mailto:Jay@xxx.com">Jay@xxx.com</A>" '設定收件人的地址 <BR>ojmail.MailServerUserName = "jay" '登录邮件器所需的用户名 <BR>ojmail.MailServerPassword = "jaysa" 登录邮件器所需的密码<BR>oJmail.Subject = "jmail寄Email測試信" '設定信件主旨 <BR>ojmail.Body ="&nbsp; ====== 邮件正文 ========="</P>
<P>if not oJmail.Send("mail.gcecn.com") then '送出郵件（通過寄件服務器地址） <BR>&nbsp; Response.Write oJmail.Log <BR>Else <BR>&nbsp; Response.Write"郵件已經寄出...." <BR>End If<BR>oJmail.Close () '關閉對象 <BR>Set oJmail = nothing<BR><BR>---------------------------------------------------------------<BR>ojmail.MailServerUserName = "jay" '登录邮件器所需的用户名 <BR>ojmail.MailServerPassword = "jaysa" 登录邮件器所需的密码<BR><BR>上面两项如果设定的不对， 在一些环境中发出的邮件即为乱码。<BR></P><img src ="http://www.cnitblog.com/oliver_yin/aggbug/2649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/oliver_yin/" target="_blank">生活像一团麻</a> 2005-09-14 08:41 <a href="http://www.cnitblog.com/oliver_yin/articles/2649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>