﻿<?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博客-在浩淼的天空下,留下生活的足迹-文章分类-知识点滴</title><link>http://www.cnitblog.com/flyinggoal/category/4259.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 14:44:52 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 14:44:52 GMT</pubDate><ttl>60</ttl><item><title>Sprintf使用详解（摘）</title><link>http://www.cnitblog.com/flyinggoal/articles/59079.html</link><dc:creator>风筝</dc:creator><author>风筝</author><pubDate>Fri, 05 Jun 2009 13:03:00 GMT</pubDate><guid>http://www.cnitblog.com/flyinggoal/articles/59079.html</guid><wfw:comment>http://www.cnitblog.com/flyinggoal/comments/59079.html</wfw:comment><comments>http://www.cnitblog.com/flyinggoal/articles/59079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/flyinggoal/comments/commentRss/59079.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/flyinggoal/services/trackbacks/59079.html</trackback:ping><description><![CDATA[sprintf() 格式化输出函数（图形）<br>功能：　函数sprintf()用来作格式化的输出。<br>用法：　此函数调用方式为int sprintf(char *string,char *format,arg_list);<br>说明：　函数sprintf()的用法和printf()函数一样，只是sprintf()函数给出第一个参数string(一般为字符数组），然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表，可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数，然后显示输出。
<div><br>函数名: sprintf<br>功&nbsp; 能: 送格式化输出到字符串中<br>用&nbsp; 法: int sprintf(char *string, char *farmat [,argument,...]);<br>程序例:</div>
<div>#include &lt;stdio.h&gt;<br>#include &lt;math.h&gt;</div>
<div>int main(void)<br>{<br>&nbsp;&nbsp; char buffer[80];</div>
<div>&nbsp;&nbsp; sprintf(buffer, "An approximation of Pi is %f\n", M_PI);<br>&nbsp;&nbsp; puts(buffer);<br>&nbsp;&nbsp; return 0;<br>}</div>
<div>sprintf的作用是将一个格式化的字符串输出到一个目的字符串中，而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串，如果不指定这个参数，执行过程中出现&nbsp;&nbsp;&nbsp;&nbsp; "该程序产生非法操作,即将被关闭...."的提示。<br>因为C语言在进行字符串操作时不检查字符串的空间是否够大，所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧，程序没有出错，也不要这么用，因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。</div>
<div>&nbsp;</div>
<div>&nbsp;sprintf，你知道多少？<br>&nbsp;<br>选自《CSDN 社区电子杂志——C/C++杂志》<br><a href="http://emag.csdn.net2005/"><font color=#006629><u>http://emag.csdn.net2005</u></font></a> 年1 月 总第1 期 - 93 -<br>本文作者：steedhorse（晨星）<br>printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数（我猜第一个是main），说<br>起来，自然是老朋友了，可是，你对这个老朋友了解多吗？你对它的那个孪生兄弟sprintf 了解多<br>吗？在将各种类型的数据构造成字符串时，sprintf 的强大功能很少会让你失望。<br>由于sprintf 跟printf 在用法上几乎一样，只是打印的目的地不同而已，前者打印到字符串中，<br>后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。所以本文着重介绍sprintf，有时<br>也穿插着用用pritnf。<br>sprintf 是个变参函数，定义如下：<br>int sprintf( char *buffer, const char *format [, argument] ... );<br>除了前两个参数类型固定外，后面可以接任意多个参数。而它的精华，显然就在第二个参数：<br>格式化字符串上。<br>printf 和sprintf 都使用格式化字符串来指定串的格式，在格式串内部使用一些以&#8220;%&#8221;开头的<br>格式说明符（format specifications）来占据一个位置，在后边的变参列表中提供相应的变量，最终<br>函数就会用相应位置的变量来替代那个说明符，产生一个调用者想要的字符串。<br>格式化数字字符串<br>sprintf 最常见的应用之一莫过于把整数打印到字符串中，所以，spritnf 在大多数场合可以替代<br>itoa。如：<br>//把整数123 打印成一个字符串保存在s 中。<br>sprintf(s, "%d", 123); //产生"123"<br>可以指定宽度，不足的左边补空格：<br>sprintf(s, "%8d%8d", 123, 4567); //产生：" 123 4567"<br>当然也可以左对齐：<br>sprintf(s, "%-8d%8d", 123, 4567); //产生："123 4567"<br>也可以按照16 进制打印：<br>sprintf(s, "%8x", 4567); //小写16 进制，宽度占8 个位置，右对齐<br>sprintf(s, "%-8X", 4568); //大写16 进制，宽度占8 个位置，左对齐</div>
<div>这样，一个整数的16 进制字符串就很容易得到，但我们在打印16 进制内容时，通常想要一<br>种左边补0 的等宽格式，那该怎么做呢？很简单，在表示宽度的数字前面加个0 就可以了。<br>sprintf(s, "%08X", 4567); //产生："000011D7"<br>上面以&#8221;%d&#8221;进行的10 进制打印同样也可以使用这种左边补0 的方式。<br>这里要注意一个符号扩展的问题：比如，假如我们想打印短整数（short）-1 的内存16 进制表<br>示形式，在Win32 平台上，一个short 型占2 个字节，所以我们自然希望用4 个16 进制数字来打<br>印它：<br>short si = -1;<br>sprintf(s, "%04X", si);<br>产生&#8220;FFFFFFFF&#8221;，怎么回事？因为spritnf 是个变参函数，除了前面两个参数之外，后面的<br>参数都不是类型安全的，函数更没有办法仅仅通过一个&#8220;%X&#8221;就能得知当初函数调用前参数压栈<br>时被压进来的到底是个4 字节的整数还是个2 字节的短整数，所以采取了统一4 字节的处理方式，<br>导致参数压栈时做了符号扩展，扩展成了32 位的整数-1，打印时4 个位置不够了，就把32 位整数<br>-1 的8 位16 进制都打印出来了。如果你想看si 的本来面目，那么就应该让编译器做0 扩展而不是<br>符号扩展（扩展时二进制左边补0 而不是补符号位）：<br>sprintf(s, "%04X", (unsigned short)si);<br>就可以了。或者：<br>unsigned short si = -1;<br>sprintf(s, "%04X", si);<br>sprintf 和printf 还可以按8 进制打印整数字符串，使用&#8221;%o&#8221;。注意8 进制和16 进制都不会打<br>印出负数，都是无符号的，实际上也就是变量的内部编码的直接的16 进制或8 进制表示。<br>控制浮点数打印格式<br>浮点数的打印和格式控制是sprintf 的又一大常用功能，浮点数使用格式符&#8221;%f&#8221;控制，默认保<br>留小数点后6 位数字，比如：<br>sprintf(s, "%f", 3.1415926); //产生"3.141593"<br>但有时我们希望自己控制打印的宽度和小数位数，这时就应该使用：&#8221;%m.nf&#8221;格式，其中m 表<br>示打印的宽度，n 表示小数点后的位数。比如：<br>sprintf(s, "%10.3f", 3.1415626); //产生：" 3.142"<br>sprintf(s, "%-10.3f", 3.1415626); //产生："3.142 "<br>sprintf(s, "%.3f", 3.1415626); //不指定总宽度，产生："3.142"<br>注意一个问题，你猜<br>int i = 100;<br>sprintf(s, "%.2f", i);<br>会打出什么东东来？&#8220;100.00&#8221;？对吗？自己试试就知道了，同时也试试下面这个：<br>sprintf(s, "%.2f", (double)i);<br>第一个打出来的肯定不是正确结果，原因跟前面提到的一样，参数压栈时调用者并不知道跟i<br>相对应的格式控制符是个&#8221;%f&#8221;。而函数执行时函数本身则并不知道当年被压入栈里的是个整数，<br>于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了，整个乱套了。<br>不过，如果有人有兴趣使用手工编码一个浮点数，那么倒可以使用这种方法来检验一下你手<br>工编排的结果是否正确。?<br>字符/Ascii 码对照<br>我们知道，在C/C++语言中，char 也是一种普通的scalable 类型，除了字长之外，它与short，<br>int，long 这些类型没有本质区别，只不过被大家习惯用来表示字符和字符串而已。（或许当年该把<br>这个类型叫做&#8220;byte&#8221;，然后现在就可以根据实际情况，使用byte 或short 来把char 通过typedef 定<br>义出来，这样更合适些）<br>于是，使用&#8221;%d&#8221;或者&#8221;%x&#8221;打印一个字符，便能得出它的10 进制或16 进制的ASCII 码；反过<br>来，使用&#8221;%c&#8221;打印一个整数，便可以看到它所对应的ASCII 字符。以下程序段把所有可见字符的<br>ASCII 码对照表打印到屏幕上（这里采用printf，注意&#8221;#&#8221;与&#8221;%X&#8221;合用时自动为16 进制数增加&#8221;0X&#8221;<br>前缀）：<br>for(int i = 32; i &lt; 127; i++) {<br>printf("[ %c ]: %3d 0x%#04X\n", i, i, i);<br>}<br>连接字符串<br>sprintf 的格式控制串中既然可以插入各种东西，并最终把它们&#8220;连成一串&#8221;，自然也就能够连<br>接字符串，从而在许多场合可以替代strcat，但sprintf 能够一次连接多个字符串（自然也可以同时<br>在它们中间插入别的内容，总之非常灵活）。比如：<br>char* who = "I";<br>char* whom = "CSDN";<br>sprintf(s, "%s love %s.", who, whom); //产生："I love CSDN. "<br>strcat 只能连接字符串（一段以&#8217;\0&#8217;结尾的字符数组或叫做字符缓冲，null-terminated-string），<br>但有时我们有两段字符缓冲区，他们并不是以&#8217;\0&#8217;结尾。比如许多从第三方库函数中返回的字符数<br>组，从硬件或者网络传输中读进来的字符流，它们未必每一段字符序列后面都有个相应的&#8217;\0&#8217;来结<br>尾。如果直接连接，不管是sprintf 还是strcat 肯定会导致非法内存操作，而strncat 也至少要求第<br>一个参数是个null-terminated-string，那该怎么办呢？我们自然会想起前面介绍打印整数和浮点数<br>时可以指定宽度，字符串也一样的。比如：<br>char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};<br>char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};<br>如果：<br>sprintf(s, "%s%s", a1, a2); //Don't do that!<br>十有八九要出问题了。是否可以改成：<br>sprintf(s, "%7s%7s", a1, a2);<br>也没好到哪儿去，正确的应该是：<br>sprintf(s, "%.7s%.7s", a1, a2);//产生："ABCDEFGHIJKLMN"<br>这可以类比打印浮点数的&#8221;%m.nf&#8221;，在&#8221;%m.ns&#8221;中，m 表示占用宽度（字符串长度不足时补空<br>格，超出了则按照实际宽度打印），n 才表示从相应的字符串中最多取用的字符数。通常在打印字<br>符串时m 没什么大用，还是点号后面的n 用的多。自然，也可以前后都只取部分字符：<br>sprintf(s, "%.6s%.5s", a1, a2);//产生："ABCDEFHIJKL"<br>在许多时候，我们或许还希望这些格式控制符中用以指定长度信息的数字是动态的，而不是<br>静态指定的，因为许多时候，程序要到运行时才会清楚到底需要取字符数组中的几个字符，这种<br>动态的宽度/精度设置功能在sprintf 的实现中也被考虑到了，sprintf 采用&#8221;*&#8221;来占用一个本来需要一<br>个指定宽度或精度的常数数字的位置，同样，而实际的宽度或精度就可以和其它被打印的变量一<br>样被提供出来，于是，上面的例子可以变成：<br>sprintf(s, "%.*s%.*s", 7, a1, 7, a2);<br>或者：<br>sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);<br>实际上，前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值，比如：<br>sprintf(s, "%-*d", 4, 'A'); //产生"65 "<br>sprintf(s, "%#0*X", 8, 128); //产生"0X000080"，"#"产生0X<br>sprintf(s, "%*.*f", 10, 2, 3.1415926); //产生" 3.14"<br>打印地址信息<br>有时调试程序时，我们可能想查看某些变量或者成员的地址，由于地址或者指针也不过是个32 位的数，你完全可以使用打印无符号整数的&#8221;%u&#8221;把他们打印出来：<br>sprintf(s, "%u", &amp;i);<br>不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址：<br>sprintf(s, "%08X", &amp;i);<br>然而，这些都是间接的方法，对于地址打印，sprintf 提供了专门的&#8221;%p&#8221;：<br>sprintf(s, "%p", &amp;i);<br>我觉得它实际上就相当于：<br>sprintf(s, "%0*x", 2 * sizeof(void *), &amp;i);<br>利用sprintf 的返回值<br>较少有人注意printf/sprintf 函数的返回值，但有时它却是有用的，spritnf 返回了本次函数调用<br>最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后，你无须再调用一次<br>strlen 便已经知道了结果字符串的长度。如：<br>int len = sprintf(s, "%d", i);<br>对于正整数来说，len 便等于整数i 的10 进制位数。<br>下面的是个完整的例子，产生10 个[0, 100)之间的随机数，并将他们打印到一个字符数组s 中，<br>以逗号分隔开。<br>#include &lt;stdio.h&gt;<br>#include &lt;time.h&gt;<br>#include &lt;stdlib.h&gt;<br>int main() {<br>srand(time(0));<br>char s[64];<br>int offset = 0;<br>for(int i = 0; i &lt; 10; i++) {<br>offset += sprintf(s + offset, "%d,", rand() % 100);<br>}<br>s[offset - 1] = '\n';//将最后一个逗号换成换行符。<br>printf(s);<br>return 0;<br>}<br>设想当你从数据库中取出一条记录，然后希望把他们的各个字段按照某种规则连接成一个字<br>符串时，就可以使用这种方法，从理论上讲，他应该比不断的strcat 效率高，因为strcat 每次调用<br>都需要先找到最后的那个&#8217;\0&#8217;的位置，而在上面给出的例子中，我们每次都利用sprintf 返回值把这<br>个位置直接记下来了。<br>使用sprintf 的常见问题<br>sprintf 是个变参函数，使用时经常出问题，而且只要出问题通常就是能导致程序崩溃的内存访<br>问错误，但好在由sprintf 误用导致的问题虽然严重，却很容易找出，无非就是那么几种情况，通<br>常用眼睛再把出错的代码多看几眼就看出来了。<br>?? 缓冲区溢出<br>第一个参数的长度太短了，没的说，给个大点的地方吧。当然也可能是后面的参数的问<br>题，建议变参对应一定要细心，而打印字符串时，尽量使用&#8221;%.ns&#8221;的形式指定最大字符数。<br>?? 忘记了第一个参数<br>低级得不能再低级问题，用printf 用得太惯了。//偶就常犯。：。（<br>?? 变参对应出问题<br>通常是忘记了提供对应某个格式符的变参，导致以后的参数统统错位，检查检查吧。尤<br>其是对应&#8221;*&#8221;的那些参数，都提供了吗？不要把一个整数对应一个&#8221;%s&#8221;，编译器会觉得你<br>欺她太甚了（编译器是obj 和exe 的妈妈，应该是个女的，:P）。<br>strftime<br>sprnitf 还有个不错的表妹：strftime，专门用于格式化时间字符串的，用法跟她表哥很像，也<br>是一大堆格式控制符，只是毕竟小姑娘家心细，她还要调用者指定缓冲区的最大长度，可能是为<br>了在出现问题时可以推卸责任吧。这里举个例子：<br>time_t t = time(0);<br>//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。<br>char s[32];<br>strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&amp;t));<br>sprintf 在MFC 中也能找到他的知音：CString::Format，strftime 在MFC 中自然也有她的同道：<br>CTime::Format，这一对由于从面向对象哪里得到了赞助，用以写出的代码更觉优雅。<br><br><br>摘自：<br><br><a href="http://www.cnblogs.com/super_x/archive/2008/12/23/1360837.html">http://www.cnblogs.com/super_x/archive/2008/12/23/1360837.html</a></div>
<img src ="http://www.cnitblog.com/flyinggoal/aggbug/59079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/flyinggoal/" target="_blank">风筝</a> 2009-06-05 21:03 <a href="http://www.cnitblog.com/flyinggoal/articles/59079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件结构介绍专题（突然对文件结构方面的知识感兴趣了）</title><link>http://www.cnitblog.com/flyinggoal/articles/37105.html</link><dc:creator>风筝</dc:creator><author>风筝</author><pubDate>Fri, 30 Nov 2007 15:03:00 GMT</pubDate><guid>http://www.cnitblog.com/flyinggoal/articles/37105.html</guid><wfw:comment>http://www.cnitblog.com/flyinggoal/comments/37105.html</wfw:comment><comments>http://www.cnitblog.com/flyinggoal/articles/37105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/flyinggoal/comments/commentRss/37105.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/flyinggoal/services/trackbacks/37105.html</trackback:ping><description><![CDATA[<u><font color=#800080>&nbsp;SWF文件结构大解剖</font></u>&nbsp;&nbsp;
<script src="http://blog.csdn.net/count.aspx?ID=564038&amp;Type=Rank"></script>
<span title=文章指数:98><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star.gif" border=0><img src="http://blog.csdn.net/images/star_half.gif" border=0></span>&nbsp;&nbsp;<img title="CSDN Blog推出文章指数概念，文章指数是对Blog文章综合评分后推算出的，综合评分项分别是该文章的点击量，回复次数，被网摘收录数量，文章长度和文章类型；满分100，每月更新一次。" alt="CSDN Blog推出文章指数概念，文章指数是对Blog文章综合评分后推算出的，综合评分项分别是该文章的点击量，回复次数，被网摘收录数量，文章长度和文章类型；满分100，每月更新一次。" src="http://blog.csdn.net/images/ask.gif" border=0>
<div class=postText>
<p>作者：牛胜超<font color=#f7f7f7>■</font>出处：天极设计在线</p>
<p>&#160;</p>
<p>&nbsp;</p>
<p>&nbsp;　Flash各种实例剖析我们都看过不少，不过你有没有想过swf文件内部到底是怎样的结构呢？不少闪客都想制作自己的Flash播放器，除了对控件的掌握和使用，更需要我们对swf文件的结构有深入的了解。于是我用WinHex分别打开一个swf文件和由它生成的exe文件，经过仔细分析对比后，我不仅发现了swf文件转变成exe可执行文件的秘密，并且将Flash自带播放器具备而控件却无法实现的那些功能的谜底也同时解开了。 </p>
<p>　　既然要&#8220;解剖&#8221;swf文件我们就要有&#8220;解剖&#8221;工具，我使用的是WinHex 9.2，你也可以用其它的二进制编辑器来查看。<br><br>　　<strong><font color=#ac0000>一、swf文件结构和信息</font></strong></p>
<p>　　左侧&#8220;偏移量&#8221;一格代表一个字节，相同或相关功能的字节用同一种背景色表示。偏移量用十进制数表示，每个字节的值均用十六进制数表示。 <br></p>
<p>
<table cellSpacing=1 cellPadding=2 width=560 align=center bgColor=#000000 border=0>
    <tbody>
        <tr bgColor=#ffffff>
            <td align=middle width=57><strong>偏移量</strong></td>
            <td align=middle width=492>
            <div align=center><strong>含义</strong></div>
            </td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>0</font></td>
            <td width=492 rowSpan=3><font size=+0>固定为46 57 53，也就是字母&#8216;F&#8217;&#8216;W&#8217;&#8216;S&#8217;<br>也有的文件为43 57 53，也就是字母&#8216;C&#8217;&#8216;W&#8217;&#8216;S&#8217; </font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>1</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>2</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>3</font></td>
            <td width=492><font size=+0>文件版本号<br><br>在播放一个swf文件之前，可根据此值与当前播放器控件的版本号比较，看是否需要更新。</font>
            <p><font size=+0>（Flash MX 生成的swf文件版本号为6）</font></p>
            </td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>4</font></td>
            <td width=492 rowSpan=4><font size=+0>文件大小<br><br>正确的文件大小应该是按7、6、5、4的顺序来排列得到的十六进制数，单位是字节。</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>5</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>6</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>7</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>8</font></td>
            <td width=492><font size=+0>影片宽高数据控制码<br><br>（<a href="http://www.clde.net/Document/Flash/Page/2005814/1633155_1.shtml" target=_blank><u><font color=#0000ff>详细说明见后</font></u></a>）</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>9<br>&#183;<br>&#183;<br>&#183;</font></td>
            <td width=492><font size=+0>影片的宽度与高度数据存放区<br><br>所占字节数由控制码决定<br>（<a href="http://www.clde.net/Document/Flash/Page/2005814/1633155_1.shtml" target=_blank><u><font color=#0000ff>详细说明见后</font></u></a>）</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>N1</font></td>
            <td width=492><font size=+0>（作用不详）</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>N2</font></td>
            <td width=492><font size=+0>影片放映速度<br><br>设计时指定的速度，单位是（帧／秒）。</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>N3</font></td>
            <td width=492 rowSpan=2><font size=+0>影片的总帧数<br><br>正确的帧数应该是按N4、N3的顺序排列得到的十六进制数。</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>N4</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>N5</font></td>
            <td width=492><font size=+0>（作用不详）</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>N6</font></td>
            <td width=492><font size=+0>（作用不详）</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>N7</font></td>
            <td width=492><font size=+0>背景色中红色值</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>N8</font></td>
            <td width=492><font size=+0>背景色中绿色值</font></td>
        </tr>
        <tr bgColor=#e3e3e3>
            <td align=middle width=57><font color=#006600>N9</font></td>
            <td width=492><font size=+0>背景色中蓝色值</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57><font color=#006600>&#183;<br>&#183;<br>&#183;</font></td>
            <td width=492><font size=+0>影片数据区</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57>　</td>
            <td width=492 rowSpan=4><font size=+0>文件的最后四个字节为40 00 00 00</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57>　</td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57>　</td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=57>　</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　注：因长宽控制码所占字节数不确定，故其后的偏移量无法用具体数字来表示，改用N1、N2、N3等符号。</p>
<p>　　以上表格中所展示的是swf文件的结构，通过它你就能很清楚地明白哪部分对你编程有用，哪部分可以解决长期困绕的你的问题，怎么样？是不是开始偷着乐了？别着急 ，继续看更精彩的还在后面呢！</p>
<p>　　<strong><font color=#ac0000>二、swf文件中记录影片宽、高的方式</font><br></strong><br>　　前面表中第八个字节&#8220;影片宽高数据控制码&#8221;指的是下表中控制码一栏中的数字。第九个字节至第N个字节&#8220;影片的宽度与高度数据存放区&#8221;指的是下表中控制码右边的那一行数字。由于控制码的不同，宽度与高度的数据存放区的字节长度也不同。<br><br>　　下表中将控制码所在的字节分为两部分（高四位和低四位）。高低位不同的组合决定了数据区占用字节数以及不同的高度算法。<br><br>　　相应的控制码后的蓝色条表示数据区所占用的字节。五星代表<strong>有效数据</strong>（注意每个五星只占半个字节），其中前面几个连续的五星对应的数据记录了高度值，后面几个连续的五星 对应的数据记录了宽度值。<br><br>　　将连续的五星所在位置的数（十六进制）组合起来，得到四位或六位的十六进制数，将此数转换成十进制数，白色五星得到的数除以<strong>10</strong>就是影片宽度数值，红色五星得到的数除以<strong>40</strong>就是影片高度数值。<br><br>　　我对每一种控制码都给出一个具体例子，请对比文件中相应的字节和实际的宽度和高度值。 </p>
<p>&#160;</p>
<p>
<table cellSpacing=1 cellPadding=2 width=560 align=center bgColor=#003399 border=0>
    <tbody>
        <tr vAlign=center>
            <td align=middle width=86 bgColor=#ffffff height=30><font size=+0>控制码</font></td>
            <td vAlign=center align=middle bgColor=#cccccc colSpan=2 height=21><font size=+0>0</font></td>
            <td vAlign=center align=middle bgColor=#ffffff colSpan=2 height=21><font size=+0>1</font></td>
            <td vAlign=center align=middle bgColor=#cccccc colSpan=2 height=21><font size=+0>2</font></td>
            <td vAlign=center align=middle bgColor=#ffffff colSpan=2 height=21><font size=+0>3</font></td>
            <td vAlign=center align=middle bgColor=#cccccc colSpan=2 height=21><font size=+0>4</font></td>
            <td vAlign=center align=middle bgColor=#ffffff colSpan=2 height=21><font size=+0>5</font></td>
            <td vAlign=center align=middle bgColor=#cccccc colSpan=2 height=21><font size=+0>6</font></td>
            <td vAlign=center align=middle bgColor=#ffffff colSpan=2 height=21><font size=+0>7</font></td>
            <td vAlign=center align=middle bgColor=#cccccc colSpan=2 height=21><font size=+0>8</font></td>
            <td align=middle bgColor=#ffffff height=21><font size=+0>宽&#215;高</font></td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>50</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>18&#215;18</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">B</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">4</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">B</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">4</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>58</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>36&#215;18</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">5</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">A</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">B</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">4</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>60</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>100&#215;48</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">3</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">E</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">8</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">1</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">E</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>68</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>160&#215;100</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">1</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">9</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">3</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">E</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">8</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>70</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>400&#215;320</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">F</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">A</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">C</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">8</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>78</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>550&#215;400</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">5</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">5</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">F</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">F</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">A</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>80</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>1600&#215;1200</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">3</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">E</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">8</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">2</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">E</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">E</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
            <td align=middle width=14 bgColor=#ffffff>　</td>
        </tr>
        <tr>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>88</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ff0000>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff><font color=#ffffff>★</font></td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle width=14 bgColor=#3399ff>　</td>
            <td align=middle bgColor=#ffffff rowSpan=2><font size=+0>2880&#215;2880</font></td>
        </tr>
        <tr>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">1</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">C</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">2</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">7</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">8</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
            <td align=middle width=14 bgColor=#ffffff><strong><font face="Arial, Helvetica, sans-serif">0</font></strong></td>
        </tr>
    </tbody>
</table>
</p>
<p><font size=+0>　　注：由于Flash的图像尺寸的限制，控制码只有以上几种情况，编程时只需对以上几种情况进行判断，分别做不同的计算处理。</font> <br><br>　　<strong><font color=#ac0000>三、swf与exe文件之间的互相转换</font></strong><br><br>　　用Flash自带的播放器可将一个swf文件转换成一个可自动播放的exe文件，这个转换过程只不过是在该swf文件前后加上播放器的代码而达到的，当我们知道了这个转换原理后，我们就可以实现由exe向swf转换了。<br><br>　　对由swf文件转换成的exe文件进行分析后，我发现Flash自带的播放器只是对swf文件做了如下几步修改：<br><br>　　1、在一个swf文件前加上exe文件头，共5BFFF字节； <br>　　2、接下来是完整的swf文件内容； <br>　　3、再接下来四个字节是exe文件的结束标志； <br>　　4、最后是记录swf文件大小的四个字节。<br><br>　　将一个Flash影片的exe文件转换成swf文件，我们只需把swf文件转换成的exe文件的过程反着做一下就可以了，也就是将上述1、3、4步骤加上的东西 删除掉就可以了。<br><br>　　详见下表： <br></p>
<p>
<table cellSpacing=1 cellPadding=2 align=center bgColor=#006699 border=0>
    <tbody>
        <tr align=middle>
            <td align=middle width=16 bgColor=#ffffff><font size=+0>&#8595;</font></td>
            <td align=middle width=55 bgColor=#ffffff>
            <div align=center><font size=+0>偏移量</font></div>
            </td>
            <td width=211 bgColor=#ffffff>
            <div align=center><font size=+0>字节内容</font></div>
            </td>
            <td width=192 bgColor=#ffffff>
            <div align=center><font size=+0>备注</font></div>
            </td>
        </tr>
        <tr>
            <td align=middle width=16 bgColor=#eaeaea rowSpan=3>　</td>
            <td align=middle width=55 bgColor=#eaeaea><font size=+0>0</font></td>
            <td width=211 bgColor=#eaeaea rowSpan=3><font size=+0>4D 5A 90&#183;&#183;&#183;00 00</font></td>
            <td width=192 bgColor=#eaeaea rowSpan=3><font size=+0>exe文件头</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#eaeaea><font size=+0>&#183;<br>&#183;<br>&#183;</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#eaeaea><font size=+0>5BFFF</font></td>
        </tr>
        <tr>
            <td align=middle width=16 bgColor=#0000ff rowSpan=4>　</td>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C000</font></td>
            <td width=211 bgColor=#d7f2ff><font size=+0>46（或43）</font></td>
            <td width=192 bgColor=#d7f2ff rowSpan=3><font size=+0>swf</font><font size=+0>文件头</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C001</font></td>
            <td width=211 bgColor=#d7f2ff><font size=+0>57</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C002</font></td>
            <td width=211 bgColor=#d7f2ff><font size=+0>53</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C003</font></td>
            <td width=211 bgColor=#d7f2ff><font size=+0>（可能为05、04、03、02、01）</font></td>
            <td width=192 bgColor=#d7f2ff><font size=+0>swf</font><font size=+0>文件版本号</font></td>
        </tr>
        <tr>
            <td align=middle width=16 bgColor=#ff0000 rowSpan=4>　</td>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C004</font></td>
            <td width=211 bgColor=#d7f2ff rowSpan=4><font size=+0>记录swf文件大小的四个字节</font></td>
            <td width=192 bgColor=#d7f2ff rowSpan=4>　</td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C005</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C006</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff><font size=+0>5C007</font></td>
        </tr>
        <tr>
            <td align=middle width=16 bgColor=#0000ff rowSpan=5>　</td>
            <td align=middle width=55 bgColor=#d7f2ff><font color=#006600>&#183;<br>&#183;<br>&#183;</font></td>
            <td width=211 bgColor=#d7f2ff><font size=+0>swf</font><font size=+0>文件内容</font></td>
            <td width=192 bgColor=#d7f2ff>　</td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
            <td width=211 bgColor=#d7f2ff><font size=+0>40</font></td>
            <td width=192 bgColor=#d7f2ff rowSpan=4><font size=+0>swf</font><font size=+0>文件的结束标志</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
            <td width=211 bgColor=#d7f2ff><font size=+0>00</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
            <td width=211 bgColor=#d7f2ff><font size=+0>00</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
            <td width=211 bgColor=#d7f2ff><font size=+0>00</font></td>
        </tr>
        <tr>
            <td align=middle width=16 bgColor=#cccccc rowSpan=4>　</td>
            <td align=middle width=55 bgColor=#eaeaea>　</td>
            <td width=211 bgColor=#eaeaea><font size=+0>56</font></td>
            <td width=192 bgColor=#eaeaea rowSpan=4><font size=+0>exe文件的结束标志</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#eaeaea>　</td>
            <td width=211 bgColor=#eaeaea><font size=+0>34</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#eaeaea>　</td>
            <td width=211 bgColor=#eaeaea><font size=+0>12</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#eaeaea>　</td>
            <td width=211 bgColor=#eaeaea><font size=+0>FA</font></td>
        </tr>
        <tr>
            <td align=middle width=16 bgColor=#ff0000 rowSpan=4>　</td>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
            <td width=211 bgColor=#d7f2ff rowSpan=4><font size=+0>记录swf文件大小的四个字节</font></td>
            <td width=192 bgColor=#d7f2ff rowSpan=4><font size=+0>与5C004～5C007的内容相同</font></td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
        </tr>
        <tr bgColor=#ffffff>
            <td align=middle width=55 bgColor=#d7f2ff>　</td>
        </tr>
    </tbody>
</table>
</p>
<p>　　到这里我们对swf文件的解剖分析就结束了，你可以结合着Flash控件动手制作一个你自己的flash播放器，一定会很棒！</p>
<tr>
</tr>
<td align="center" height="40"></td>
<br></div>
<img src ="http://www.cnitblog.com/flyinggoal/aggbug/37105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/flyinggoal/" target="_blank">风筝</a> 2007-11-30 23:03 <a href="http://www.cnitblog.com/flyinggoal/articles/37105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Delphi7中调试COM+ （看到一个关于这个的介绍，感觉不错）</title><link>http://www.cnitblog.com/flyinggoal/articles/19424.html</link><dc:creator>风筝</dc:creator><author>风筝</author><pubDate>Tue, 21 Nov 2006 02:56:00 GMT</pubDate><guid>http://www.cnitblog.com/flyinggoal/articles/19424.html</guid><wfw:comment>http://www.cnitblog.com/flyinggoal/comments/19424.html</wfw:comment><comments>http://www.cnitblog.com/flyinggoal/articles/19424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/flyinggoal/comments/commentRss/19424.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/flyinggoal/services/trackbacks/19424.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="0" cellpadding="0" width="730" align="center" border="0">
				<tbody>
						<tr>
								<td style="FONT-SIZE: 12pt; COLOR: #ff6600" align="middle" width="742" height="32">在Delphi7中调试COM+</td>
						</tr>
						<tr>
								<td align="middle" bgcolor="#f7f7f7" height="25">作者：佚名  来源：不详  发布时间：2005-3-14 22:35:07  发布人：admin</td>
						</tr>
						<script language="javascript"><![CDATA[
var newasp_fontsize=9;
var newasp_lineheight=12;
]]&gt;</script>
						<tr>
								<td>
										<p align="right"> </p>
										<div class="ContentFont" id="NewaspContentLabel" style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">
												<font id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-serif">&gt;开发COM+应用系统最令人头痛的问题便是如何调试 COM+组件了。由于COM+是执行在COM+的执行环境中，因此Delphi 的程序员无法像Delphi的分布式多层应用系统一样可以直接在 Delphi 的IDE 中设定应用程序服务器的断点来调试。 
<p>事实上， Delphi 仍然可以在 Delphi 的集成开发环境中调试 COM+组件，也可以让程序员在集成开发环境中在COM+组件的程序单元中设定断点，然后执行客户端应用程序调用 COM+组件。此时 Delphi 便会把执行控制权带到Delphi 的集成开发环境中，并且暂停在程序员设定的断点上让程序员开始调试。从此开始，程序员就可以像调试一般的应用程序一样来调COM+组件了。不过要如此调试COM+组件，程序员必须先做一些设定。</p><p></p><p>1、在Delphi 的集成开发环境中激活要被调试的 COM+ 组件项目，点Projects|Options 菜单，在弹出的对话框中选择Linker页，选中其中的include Td32 info 和 include remote debug symbol ；</p><p>2、点 Run|Install Com+ Objects菜单，注册COM+组件，最好是注册到新的应用程序，也可以注册到已有的应用程序（这个应用程序需要是由Delphi 的注册COM程序产生的）。</p><p>3、运行Win2000的 控制面板|管理工具|组件服务，在COM+应用程序中找到刚才COM注册的应用程序，点右键，选择“属性”菜单，在弹出的对话框中，选择“高级”页，选中其中的“在调试器中启动”选项，在下面的调试路径中会有类似如下的内容："C:\Program Files\Borland\Delphi7\Bin\bordbg70.exe" dllhost.exe /ProcessID:{9CEC476D-83A5-4C2B-AFF1-3E83A147B866}</p><p>4、回到Delphi的集成开发环境，点选Run|Parameters 菜单，在对话框中，HostApplication设为：C:\WINNT\system32\DLLHOST.EXE ，（要根据你的操作系统安装情况设定）。 Parameters 设为：/ProcessID:{9CEC476D-83A5-4C2B-AFF1-3E83A147B866}；这个GUID的值要和Win2000组件服务中的属性值一致，可以从那边直接COPY过来。</p><p>5、设置断点，在Delphi的集成开发环境中运行COM；</p><p>6、在<a class="wordstyle" href="http://www.18839.com/" target="_blank">Windows</a>中（或新开的Delphi环境中）运行调用这个COM的客户端程序。</p><p>这时会发现，Delphi开发环境中的COM停在断点处了，就可以接下来单步跟踪调试了。</p></font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/flyinggoal/aggbug/19424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/flyinggoal/" target="_blank">风筝</a> 2006-11-21 10:56 <a href="http://www.cnitblog.com/flyinggoal/articles/19424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于com和com+的一点介绍</title><link>http://www.cnitblog.com/flyinggoal/articles/19420.html</link><dc:creator>风筝</dc:creator><author>风筝</author><pubDate>Tue, 21 Nov 2006 02:37:00 GMT</pubDate><guid>http://www.cnitblog.com/flyinggoal/articles/19420.html</guid><wfw:comment>http://www.cnitblog.com/flyinggoal/comments/19420.html</wfw:comment><comments>http://www.cnitblog.com/flyinggoal/articles/19420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/flyinggoal/comments/commentRss/19420.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/flyinggoal/services/trackbacks/19420.html</trackback:ping><description><![CDATA[什么是COM？ <br />所谓COM（Componet Object Model，组件对象模型），是一种说明如何建立可动态互变组件的规范，此规范提供了为保证能够互操作，客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。 <br />COM的优点？ <br />首先：用户一般希望能够定制所用的应用程序，而组件技术从本质上讲就是可被定制的，因而用户可以用更能满足他们需要的某个组件来替换原来的那个。其次，由于组件是相对应用程序独立的部件，我们可以在不同的程序中使用同一个组件而不会产生任何问题，软件的可重用性将大大的得到增强。第三，随着网络带宽及其重要性的提高，分布式网络应用程序毫无疑问的成为软件市场上越来越重要的买点。组件价构可以使得开发这类应用程序的过程得以简化。 <br /><br /><br />什么是COM+？ <br />COM+并不是COM的简单升级，COM+的底层结构仍然以COM为基础，它几乎包容了COM的所有内容，COM+综合了COM、DCOM和MTS这些技术要素，它把COM组件软件提升到应用层而不再是底层的软件结构，它通过操作系统的各种支持，使组件对象模型建立在应用层上，把所有组件的底层细节留给操作系统，因此，COM+与操作系统的结合更加紧密。 <br />COM+不再局限于COM的组件技术，它更加注重于分布式网络应用的设计和实现。COM+继承了COM几乎全部的优势，同时又避免了COM实现方面的一些不足，把COM、DCOM和MTS的编程模型结合起来，继承了它们的绝大多数特性，在原有的特性上增加了新的功能。 <br /><br /><br />COM+的新的优点? <br />以下列出COM+的几个主要特性： <br /><br />COM+不仅继承了COM所有的优点，而且还增加了一些服务，比如队列服务、负载平衡、内存数据库、事件服务等。 <br /><br />队列服务对于分布式应用非常有意义，特别是在现在网络速度很慢的情况下，这种机制可以保证应用系统能够可靠地运行。在应用系统包含大量节点但服务器又繁忙的情况下，客户应用程序可以把它们的请求放到队列中，当服务器负载比较轻的时候再处理这些请求； <br /><br />又如COM+提供了负载平衡服务，它可以实现动态负载平衡，而且COM+应用程序的负载平衡特性并不需要编写代码来支持，客户程序和组件程序都可以按通常的方式实现。获得负载平衡特性并不是用程序设计的方式来实现的，而是通过配置实现分布式应用程序的负载平衡，如上所讲的队列服务，其实也反映了一种负载平衡。 <br /><br />(1) 真正的异步通讯。COM+底层提供了队列组件服务，这使客户和组件有可能在不同的时间点上协同工作，COM+应用无须增加代码就可以获得这样的特性。 <br /><br />(2) 事件服务。新的事件机制使事件源和事件接收方实现事件功能更加灵活，利用系统服务简化了事件模型，避免了COM可连接对象机制的琐碎细节。 <br /><br />(3) 可伸缩性。COM+的可伸缩性来源于多个方面，动态负载平衡以及内存数据库、对象池等系统服务都为COM+的可伸缩性提供了技术基础，COM+的可伸缩性原理上与多层结构的可伸缩特性一致。 <br /><br />(4) 可管理和可配置性。管理和配置是应用系统开发完成后的行为，在软件维护成本不断增加的今天，COM+应用将有助于软件厂商和用户减少这方面的投入。 <br /><br />(5) 易于开发。COM+应用开发的复杂性和难易程度将决定COM+的成功与否，虽然COM+开发模型比以前的COM组件开发更为简化，但真正提高开发效率仍需要借助于一些优秀的开发工具。 <br /><br />COM+标志着Microsoft的组件技术达到了一个新的高度，它不再局限于一台机器上的桌面系统，它把目标指向了更为广阔的企业内部网，甚至Internet国际互连网络。COM+与多层结构模型以及Windows操作系统为企业应用或Web应用提供了一套完整的解决方案。 <br />参考资料：<a href="http://www.blogchinese.com/user1/43043/archives/2005/52092.shtml" target="_blank">http://www.blogchinese.com/user1/43043/archives/2005/52092.shtml</a><img src ="http://www.cnitblog.com/flyinggoal/aggbug/19420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/flyinggoal/" target="_blank">风筝</a> 2006-11-21 10:37 <a href="http://www.cnitblog.com/flyinggoal/articles/19420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一点winmax的知识</title><link>http://www.cnitblog.com/flyinggoal/articles/17452.html</link><dc:creator>风筝</dc:creator><author>风筝</author><pubDate>Thu, 28 Sep 2006 09:31:00 GMT</pubDate><guid>http://www.cnitblog.com/flyinggoal/articles/17452.html</guid><wfw:comment>http://www.cnitblog.com/flyinggoal/comments/17452.html</wfw:comment><comments>http://www.cnitblog.com/flyinggoal/articles/17452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/flyinggoal/comments/commentRss/17452.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/flyinggoal/services/trackbacks/17452.html</trackback:ping><description><![CDATA[   通讯技术发展到今天，革命性变化往往不是发生在技术层面，而是将成熟的技术迅速推广到社会的各个领域，给整个社会生活带来巨大影响。<br />     <br />     　　WiMAX宽带接入的革命事件　　<br />     　　<br />     　　WiMAX由来<br />     　　<br />     　　6月9日英特尔公司副总裁兼亚太区总经理蒋安邦(John Antone)宣布，公司已经与大连和成都市政府签署了谅解备忘录，在上述城市布设最新的WiMAX宽带无线技术。根据备忘录，成都与大连架设的网络设施将全面启用最新的WiMAX宽带无线技术，从而为企业与家庭宽带接入的“最后一公里”问题提供了新的无线解决方案。<br />     <br />     　　其实在WiMAX产生之前，无线微波通讯就已经存在了很多年，从最早用于电视信号传输的微波干线，到后来作为线路备份，甚至C波段的卫星通讯。近几年中国联通又开通了工作在26G频段的LMDS无线接入服务，以及从2001年开始在部分城市招标开通的3.5G频段固定无线接入服务。微波无线通讯早就不是什么新的技术。<br />     <br />     　　但是自从2001年包括Nokia、英特尔在内的世界著名供应商发起成立WiMAX以后，WiMAX受到业界的高度关注。甚至被评选为未来最重要的十大技术之一。很多人甚至用取代3G的乐观态度寄予WiMAX以厚望。<br />     <br />     　　WiMAX（World Interoperability for Microwave Access）全称为全球微波接入互操作性，是基于IEEE802.16标准的无线城域网技术。虽然在WiMAX组织正式成立以前，微波通讯就已经在各个领域被利用，但是由于各家设备不兼容，没有一个权威的组织制定统一的协议标准并对各家的设备进行认证，加之世界各国对无线频谱的管理并不完全一致，每个设备厂商提供的解决方案有很强的专用性，应用领域和应用范围都受到限制，致使设备成本居高不下。WiMAX组织从2001年开始制定标准，并对芯片、设备进行认证，规模经济使成本下降成为可能，WiMAX的应用领域也随之扩大。<br />     <br />     　　据统计，截止到2002年美国有2400个ISP（互联网接入服务提供商）为超过6000个无线接入市场服务，但是由于标准不统一，各个供应商设备昂贵，不能互联，给用户带来了很大的负担。WiMAX的出现正好能够解决这个问题。<br />     <br />     　　现在WiMAX组织包括芯片制造商（例如英特尔）、设备供应商（例如阿尔卡特）、电信运营商（例如BT英国电信），产业链已经十分完整。目前全球有众多的实验网络，符合WiMAX标准的设备最早在今年第四季度可以提交商用，大规模应用将在2005年开始，英特尔计划在2006年推出集成移动WiMAX芯片的讯驰芯片组。参照WiFi的经验。WiMAX的规模应用为期不远。<br />     <br />     　　<br />     　　<br />     　　更快、更远、更便宜<br />     　　<br />     　　WiMAX技术的突出特点是比WiFi具有更远的覆盖半径。WiFi主要是解决100米内的无线接入问题，是属于WLAN（无线局域网）的范畴。WiFi在开阔地带最远可以达到300米，在室内一般有效覆盖范围在100米以内。而WiMAX最远可以达到50公里的覆盖范围，属于无线城域网（WMAN）的范畴，其典型应用的覆盖范围是6－10公里。相比3G提供小于2M的带宽，WiMAX每个基站最多可以划分成6个扇面，每个扇面可以提供70M独立带宽，并且基站的覆盖范围是3G基站的10倍。因此有人认为WiMAX将取代3G，成为下一代通讯的主流技术。<br />     <br />     　　不过这种看法还过于乐观，WiMAX是基于802.16协议，在早期通过的802.16标准里，工作频段是11——60G，不能提供非视线连接。所谓视线连接接，就是指通讯的基站和客户端之间不能有什么阻挡，必须存在一条光线（或者视线）可以直接通过的通道。这主要是由于微波通讯的特性所决定。高频信号绕过障碍的能力十分有限，同时还受天气影响，例如下雨通常会导致信号衰竭，通讯质量降低。同时802.16协议是基于固定无线接入技术设计，不能满足移动的需求，而3G是面向广域移动通讯的技术方案，在移动性和信号绕过障碍的能力上是802.16所不能比拟的。<br />     <br />     　　在此基础上WiMAX组织开发了802.16a，其工作的频段要比802.16低，主要工作在2——11G的频段范围，信号绕过障碍的能力得到提高，目前已经可以支持非视距传输，意味着在基站和客户端之间可以有树木或者建筑物的阻挡，WiMAX的应用领域被拓宽。<br />     <br />     　　针对802.16a不具备移动性能的问题，WiMAX在此基础上制定了802.16e标准。按照802.16e标准，手持PDA步行或者使用移动计算设备，无线连接也不会中断。因此WiMAX具有了移动性能。不过满足该标准的产品，要在2006年才能正式投入商用。<br />     <br />     　　根据分析机构的预测，由于WiMAX标准统一，基站和客户端的规模经济得以实现。到2005年，预计每套WiMAX芯片组的价格将在25美金左右，每个基站的建设成本将控制在20000美金以下。回顾WiFi客户端从千元级别迅速下降到百元级别，规模经济将是WiMAX最有竞争力的优势。保守计算，按照一个基站4个扇面，每个扇面提供50M带宽，覆盖范围为10公里，为每个客户提供512K独立带宽，一个基站可以同时为400个客户服务，每个客户分摊基站的费用为50美元，运营商的初期投入成本压力并不大。加上WiMAX对地形的良好适应性，在客户密度小的区域费用远远低于光纤或者双绞线，WiMAX在宽带接入领域将有很强的竞争力。<br />     <br />     　　<br />     　　<br />     　　组网灵活<br />     　　<br />     　　WiMAX的典型组网方式如图所示，在这套解决方案里，WiMAX主要应用在这样几个领域：<br />     <br />     　　1、蜂窝回程，在部署一个较大区域的无线接入网络时，可以利用WiMAX基站之间的无线链接，延伸网络覆盖范围。<br />     <br />     　　2、WiFi热点回程，如图中2所示，在一个区域部署WiFi热点，热点与互联网之间的远距离链接由WiMAX完成，延伸了热点的使用范围。<br />     <br />     　　3、社区宽带，对一些DSL或者Cable接入方式难以覆盖的地方，可以考虑采用WiMAX作为替代方案；相比之下，WiMAX较少受距离和社区密度影响；对于一些临时性的聚集地，例如展会，WiMAX部署周期短地特点也比DSL或者Cable接入方式拥有更大地灵活性。<br />     <br />     　　4、经济欠发达地区或者需要保护的地方，经济欠发达地区可能没有事前部署双绞线或者同轴电缆，重新布线受用户密度制约，经济性不高；而对于故宫这样的文物，重新布线更是不可能，WiMAX就成为一个良好的选择。<br />     <br />     　　5、最佳无线连接方式，对于在家庭部署了WiFi的用户，可能会临时移动到WiFi覆盖范围之外，这时候802.16e作为802.16a的扩展，可以保证移动用户在WiFi网络和WiMAX网络中平滑漫游，这样客户端可以自动选择利用WiFi还是WiMAX，保证了最佳的链接方式。<br />     <br />     　　在上述的几种组网方式中，WiMAX都支持数据、语音和视频。WiMAX独有的服务质量保证（QoS）、按需提供的带宽分配、自适应参数调整等特点，给组网带了更大的灵活性。<br />     <br />     　　例如在语音和视频服务中，对时延非常敏感，但是对差错就不那么敏感，而数据服务则正好相反，对时延不敏感，对差错非常敏感，WiMAX可以根据上层应用不同提供不同等级的服务质量保障，提高网络吞吐容量。<br />     <br />     　　商业用户可能需要更宽的带宽，而家庭用户可能就不需要很高的带宽，视频点播需要较小的上行带宽而需要很高的下行带宽，对这些WiMAX都可以灵活配置予以满足。在距离和通讯速度之间，WiMAX也可以自动适应，例如为了满足距离要求调整信号调制方式，降低速度保证通信。<br />     <br />     　　频谱波折不过就在英特尔全力推进WiMAX的时候，世界最大手机供应商，也是3G最重要的设备供应商，WiMAX的发起人之一Nokia宣布退出WiMAX（最新消息Nokia又宣布重新加入WiMAX组织）。业内有分析人士认为，Nokia的退出实际上反应了WiMAX的频谱难题。虽然视距传输的802.16和非视距传输的802.16a分别工作在11－60G的频段和2-11G的频段，表面看来频率资源非常丰富。但是各国对无线电频率的管理并不统一，在上述频段塞进了太多的应用：微波雷达、导航、遥感测试、卫星通信、WiFi等等。同时对一些不需要执照的频段，任何人都可以使用，这好比是在一个公共的会议室里，大家都可以大声说话，但是能否听见则是另一回事。Nokia的退出，实际上证实了这种担忧。已经有执照许可的频段面临竞争，不需要执照许可频段的又面临难以解决的干扰问题。WiMAX要适应各个国家的频谱问题，并不是一件容易的事。<br />     <br />     　　但是事情并没有看起来那么悲观，WiMAX在技术上的吸引力有足够动力改变这个现状。英特尔从今年4月起就开始了游说，英特尔的理由是既然现在无线电频率可以用在更多有趣的事上，为什么不可以改变它呢？<br />     <br />     　　2003年，在中国第三届宽带无线技术大会上，国家无线电管理局副局长谢飞波介绍，国际电信联盟在5G的频段上为无线固定、移动业务增加了频率，使5G频段上目前有600M的频率可以用于无线移动和固定通讯。这实际上已经开始着手给WiMAX宽带无线接入应用提供充足的频率资源。<br />     <br />     　　在3.5G频段上，中国从2001年6月和2003年2月开始进行了招标，在数个城市开展无线接入的尝试。<br />     <br />     　　比较有意思的是各种对WiMAX进行市场预测的分析报告，都把中国作为一个非常重要的市场。在其中一份分析资料中还把中国称为世界最大的宽带无线接入市场。<br />     <br />     　　这份报告分析，中国从2001年开始，用于ADSL的投资已经有数亿美元之多，通过ADSL接入互联网的用户从100万上升到1000万之多。中国在2000年将3.5G中的2个频段许可给了5个城市，2003年给了32个城市，很快中国300多个城市都将得到这个许可。<br />     <br />     　　这份报告还列举了在中国可能应用的业务领域，电话、互联网茶馆、医疗保险网络、企业电话交换机的中继线路、企业网络接入、银行专用网络以及高速移动互联网业务。<br />     <br />     　　目前看起来，已经没有什么力量能够阻挡WiMAX的应用了，唯一的悬念是拿WiMAX来干什么。数年前有一个宽带网络应用瓶颈调查，众说纷纭，但是后来的事实证明所有的应用、产业环境、消费意识都不是问题，当宽带变得像大白菜一样便宜时，所有的问题都不成为问题。<br />     <br />     　　WiMAX的革命性不在其他，就在更便宜上。便宜是上帝也无法阻挡的。<br /><img src ="http://www.cnitblog.com/flyinggoal/aggbug/17452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/flyinggoal/" target="_blank">风筝</a> 2006-09-28 17:31 <a href="http://www.cnitblog.com/flyinggoal/articles/17452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>