﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-c/c++</title><link>http://www.cppblog.com/xvsdf100/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 23:27:37 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 23:27:37 GMT</pubDate><ttl>60</ttl><item><title>为什么安装ubuntu 12.04.3 wubi找不到镜像！！！</title><link>http://www.cppblog.com/xvsdf100/archive/2013/12/18/204880.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Wed, 18 Dec 2013 14:46:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/12/18/204880.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/204880.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/12/18/204880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/204880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/204880.html</trackback:ping><description><![CDATA[如题我也不知道为什么？？<br />我开始下载32位的，然后把里面的wubi拷贝出来，坑爹尽然是12.04.1 所以找不到。。<br />然后我到网上找12.04.3 32位，。。。。 找不到。。。。。。到官网只能64位。。。<br />后面只能下载64为用这个wubi 安装成功。。。<br />不容易啊。。。。。<img src ="http://www.cppblog.com/xvsdf100/aggbug/204880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-12-18 22:46 <a href="http://www.cppblog.com/xvsdf100/archive/2013/12/18/204880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>客户端不停的发送数据会对服务器有什么影响？（一个连接上）</title><link>http://www.cppblog.com/xvsdf100/archive/2013/12/18/204879.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Wed, 18 Dec 2013 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/12/18/204879.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/204879.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/12/18/204879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/204879.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/204879.html</trackback:ping><description><![CDATA[这个问题我是在论坛看到的类似的问题，当时回复了他。。后面仔细想想又好像自己也不是太清楚。如是又看了一下tcp/ip详解。。。。<br />顺便自己做了一下实验，发现发送一些数据后客户端就卡死了（阻塞套接字），服务器只接受连接，不取出系统缓存的数据。<br /><br />我想估计是服务器的对应套接字的buffer用完了，所以内核不在接收数据了，导致客户端不能够发送数据。那这样看来，客户端想不停的发送数据，只有不断建立连接才可以，在一个连接不停发送数据是不能的事情。<br /><br />后面看了一下buffer 和 窗口大概类似，但不等于一会事。<br />比喻本机上窗口是25000，但接收buffer 8192.. &nbsp;而且看tcp/ip 2貌似buffer还是可以提高他的上限。<br /><br />以前觉得socket send 貌似就等于tcp/ip协议，现在看来真好傻，好天真。。<br />socket 函数只是插口层。。以前不明白为什么插口，现在明白了，就是用应用层钥匙，通过这把钥匙来跟下面协议打交道。。<br /><img src ="http://www.cppblog.com/xvsdf100/aggbug/204879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-12-18 22:26 <a href="http://www.cppblog.com/xvsdf100/archive/2013/12/18/204879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你真的懂select吗？？</title><link>http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Tue, 10 Dec 2013 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/204689.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/204689.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/204689.html</trackback:ping><description><![CDATA[&nbsp; &nbsp;只要接触过c/c++网路编程人都可能会知道select io 模式，网络书籍都说 fd_set {int num; SOCKET arr[64]} 有所限制，因为数组的长度只有64，那么超过64你就不能放，要么你就是用多线程分别实用select.。<br />
一些书籍通过改定义宏 使数组的长度变长，但也不实用，不能动态的变化，我总不能定一个非常的长的长度，毕竟是在栈上。<br />
&nbsp; &nbsp;我就在想那么select完全只能在客户端使用，而且套接字还不能超过64。那这不就是一个软肋吗？？一直对这个有一个迷惑。。。。。<br />
<br />
&nbsp; &nbsp;后来，自己看到了libevent的源代码发现他也用的是select。。看别人说这个库，轻轻松松处理上万个套接字，我就在想select不是有限制吗？？他是怎么做到。。。。。。<br />
看了源代码，我明白了。他只是用对上存放SOCKET的句柄。。我们看一下他的新定义结构体。<br />
<br />
<div>struct win_fd_set {</div>
<div><span style="white-space:pre">	</span>u_int fd_count;</div>
<div><span style="white-space:pre">	</span>SOCKET fd_array[1];</div>
<div>};<br />
<br />
这个就是新定义结构体，跟原来稍微有点变化只是把64改为1，有些同学可能见多很多这样的写法，这种写法我也在一些项目使用了。这种写法可以fd_array动态变化。<br />
win_fd_set * Set = (win_fd_set*)malloc(sizeof(win_fd_set) + sizoef(SCOEKT) * 10);<br />
Set-&gt;fd_array 可以放11 个 SOCKET，因为我的内存大小足够放11个SOCKET。<br />
请记住内存是没有数据格式，只要足够大小，随便你怎么放。数据格式只是方便我们管理和处理数据而已。<br />
这样就解决64个大小限制。。我其实一直很好奇为什么中国书籍都是一样的，libevent已经出来好久了，但也没有看到有人说这一点，可能是高手们都不屑。<br />
现在渐渐喜欢看开源的代码，不喜欢看书籍了，喜欢在代码中学习他们是怎么组织一个好项目。<br />
有时候感慨：<span style="color: red;">高手用c 写着漂亮的c++代码，而我等菜鸟却用c++ 写丑陋的c代码。。</span><br />
<br />
我顺便把他整个定义结构和函数给大家贴出来，免大家还要自己去下libevent，不过推荐没有看过libevent同学，可以稍微看一下。<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #0000FF; ">volatile</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;SIGFPE_REQ&nbsp;=&nbsp;0.0f;<br />
<span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;idx_info&nbsp;{<br />
<span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;read_pos_plus1;<br />
<span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;write_pos_plus1;<br />
<span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;};<br />
<span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;{<br />
<span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;num_fds_in_fd_sets;<br />
<span style="color: #008080; ">&nbsp;10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resize_out_sets;<br />
<span style="color: #008080; ">&nbsp;11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*readset_in;<br />
<span style="color: #008080; ">&nbsp;12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*writeset_in;<br />
<span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*readset_out;<br />
<span style="color: #008080; ">&nbsp;14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*writeset_out;<br />
<span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*exset_out;<br />
<span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;signals_are_broken&nbsp;:&nbsp;1;<br />
<span style="color: #008080; ">&nbsp;17</span>&nbsp;};<br />
<span style="color: #008080; ">&nbsp;18</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*win32_init(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*);<br />
<span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;win32_add(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*,&nbsp;evutil_socket_t,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;old,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;events,&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*_idx);<br />
<span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;win32_del(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*,&nbsp;evutil_socket_t,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;old,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;events,&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*_idx);<br />
<span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;win32_dispatch(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*<span style="color: #0000FF; ">base</span>,&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;*);<br />
<span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;win32_dealloc(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*);<br />
<span style="color: #008080; ">&nbsp;24</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;eventop&nbsp;win32ops&nbsp;=&nbsp;{<br />
<span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"win32",<br />
<span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32_init,<br />
<span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32_add,<br />
<span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32_del,<br />
<span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32_dispatch,<br />
<span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32_dealloc,<br />
<span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;doesn't&nbsp;need&nbsp;reinit&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;No&nbsp;features&nbsp;supported.&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">struct</span>&nbsp;idx_info),<br />
<span style="color: #008080; ">&nbsp;35</span>&nbsp;};<br />
<span style="color: #008080; ">&nbsp;36</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;FD_SET_ALLOC_SIZE(n)&nbsp;((sizeof(struct&nbsp;win_fd_set)&nbsp;+&nbsp;((n)-1)*sizeof(SOCKET)))<br />
<span style="color: #008080; ">&nbsp;38</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span><br />
<span style="color: #008080; ">&nbsp;40</span>&nbsp;grow_fd_sets(<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*op,&nbsp;unsigned&nbsp;new_num_fds)<br />
<span style="color: #008080; ">&nbsp;41</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;size;<br />
<span style="color: #008080; ">&nbsp;43</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVUTIL_ASSERT(new_num_fds&nbsp;&gt;=&nbsp;op-&gt;readset_in-&gt;fd_count&nbsp;&amp;&amp;<br />
<span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_num_fds&nbsp;&gt;=&nbsp;op-&gt;writeset_in-&gt;fd_count);<br />
<span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVUTIL_ASSERT(new_num_fds&nbsp;&gt;=&nbsp;1);<br />
<span style="color: #008080; ">&nbsp;47</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;FD_SET_ALLOC_SIZE(new_num_fds);<br />
<span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(op-&gt;readset_in&nbsp;=&nbsp;mm_realloc(op-&gt;readset_in,&nbsp;size)))<br />
<span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(op-&gt;writeset_in&nbsp;=&nbsp;mm_realloc(op-&gt;writeset_in,&nbsp;size)))<br />
<span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op-&gt;resize_out_sets&nbsp;=&nbsp;1;<br />
<span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op-&gt;num_fds_in_fd_sets&nbsp;=&nbsp;new_num_fds;<br />
<span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">&nbsp;56</span>&nbsp;}<br />
<span style="color: #008080; ">&nbsp;57</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span><br />
<span style="color: #008080; ">&nbsp;59</span>&nbsp;do_fd_set(<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*op,&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;idx_info&nbsp;*ent,&nbsp;evutil_socket_t&nbsp;s,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;read)<br />
<span style="color: #008080; ">&nbsp;60</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*<span style="color: #0000FF; ">set</span>&nbsp;=&nbsp;read&nbsp;?&nbsp;op-&gt;readset_in&nbsp;:&nbsp;op-&gt;writeset_in;<br />
<span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(read)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(ent-&gt;read_pos_plus1&nbsp;&gt;&nbsp;0)<br />
<span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(ent-&gt;write_pos_plus1&nbsp;&gt;&nbsp;0)<br />
<span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">set</span>-&gt;fd_count&nbsp;==&nbsp;op-&gt;num_fds_in_fd_sets)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(grow_fd_sets(op,&nbsp;op-&gt;num_fds_in_fd_sets*2))<br />
<span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;set&nbsp;pointer&nbsp;will&nbsp;have&nbsp;changed&nbsp;and&nbsp;needs&nbsp;reiniting!&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;=&nbsp;read&nbsp;?&nbsp;op-&gt;readset_in&nbsp;:&nbsp;op-&gt;writeset_in;<br />
<span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>-&gt;fd_array[<span style="color: #0000FF; ">set</span>-&gt;fd_count]&nbsp;=&nbsp;s;<br />
<span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(read)<br />
<span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent-&gt;read_pos_plus1&nbsp;=&nbsp;<span style="color: #0000FF; ">set</span>-&gt;fd_count+1;<br />
<span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />
<span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent-&gt;write_pos_plus1&nbsp;=&nbsp;<span style="color: #0000FF; ">set</span>-&gt;fd_count+1;<br />
<span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(<span style="color: #0000FF; ">set</span>-&gt;fd_count++);<br />
<span style="color: #008080; ">&nbsp;81</span>&nbsp;}<br />
<span style="color: #008080; ">&nbsp;82</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span><br />
<span style="color: #008080; ">&nbsp;84</span>&nbsp;do_fd_clear(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*<span style="color: #0000FF; ">base</span>,<br />
<span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*op,&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;idx_info&nbsp;*ent,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;read)<br />
<span style="color: #008080; ">&nbsp;86</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />
<span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*<span style="color: #0000FF; ">set</span>&nbsp;=&nbsp;read&nbsp;?&nbsp;op-&gt;readset_in&nbsp;:&nbsp;op-&gt;writeset_in;<br />
<span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(read)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;ent-&gt;read_pos_plus1&nbsp;-&nbsp;1;<br />
<span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent-&gt;read_pos_plus1&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;ent-&gt;write_pos_plus1&nbsp;-&nbsp;1;<br />
<span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent-&gt;write_pos_plus1&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(i&nbsp;&lt;&nbsp;0)<br />
<span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(--<span style="color: #0000FF; ">set</span>-&gt;fd_count&nbsp;!=&nbsp;(unsigned)i)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;idx_info&nbsp;*ent2;<br />
<span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOCKET&nbsp;s2;<br />
<span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2&nbsp;=&nbsp;<span style="color: #0000FF; ">set</span>-&gt;fd_array[i]&nbsp;=&nbsp;<span style="color: #0000FF; ">set</span>-&gt;fd_array[<span style="color: #0000FF; ">set</span>-&gt;fd_count];<br />
<span style="color: #008080; ">102</span>&nbsp;<br />
<span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent2&nbsp;=&nbsp;evmap_io_get_fdinfo(&amp;<span style="color: #0000FF; ">base</span>-&gt;io,&nbsp;s2);<br />
<span style="color: #008080; ">104</span>&nbsp;<br />
<span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!ent2)&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;This&nbsp;indicates&nbsp;a&nbsp;bug.&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(read)<br />
<span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent2-&gt;read_pos_plus1&nbsp;=&nbsp;i+1;<br />
<span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />
<span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ent2-&gt;write_pos_plus1&nbsp;=&nbsp;i+1;<br />
<span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">113</span>&nbsp;}<br />
<span style="color: #008080; ">114</span>&nbsp;<br />
<span style="color: #008080; ">115</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;NEVENT&nbsp;32<br />
<span style="color: #008080; ">116</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*<br />
<span style="color: #008080; ">117</span>&nbsp;win32_init(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*_base)<br />
<span style="color: #008080; ">118</span>&nbsp;{<br />
<span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*winop;<br />
<span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;size;<br />
<span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(winop&nbsp;=&nbsp;mm_calloc(1,&nbsp;<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">struct</span>&nbsp;win32op))))<br />
<span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;<br />
<span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;winop-&gt;num_fds_in_fd_sets&nbsp;=&nbsp;NEVENT;<br />
<span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;FD_SET_ALLOC_SIZE(NEVENT);<br />
<span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(winop-&gt;readset_in&nbsp;=&nbsp;mm_malloc(size)))<br />
<span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">goto</span>&nbsp;err;<br />
<span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(winop-&gt;writeset_in&nbsp;=&nbsp;mm_malloc(size)))<br />
<span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">goto</span>&nbsp;err;<br />
<span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(winop-&gt;readset_out&nbsp;=&nbsp;mm_malloc(size)))<br />
<span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">goto</span>&nbsp;err;<br />
<span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(winop-&gt;writeset_out&nbsp;=&nbsp;mm_malloc(size)))<br />
<span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">goto</span>&nbsp;err;<br />
<span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(winop-&gt;exset_out&nbsp;=&nbsp;mm_malloc(size)))<br />
<span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">goto</span>&nbsp;err;<br />
<span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;winop-&gt;readset_in-&gt;fd_count&nbsp;=&nbsp;winop-&gt;writeset_in-&gt;fd_count&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;winop-&gt;readset_out-&gt;fd_count&nbsp;=&nbsp;winop-&gt;writeset_out-&gt;fd_count<br />
<span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;winop-&gt;exset_out-&gt;fd_count&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">138</span>&nbsp;<br />
<span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(evsig_init(_base)&nbsp;&lt;&nbsp;0)<br />
<span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;winop-&gt;signals_are_broken&nbsp;=&nbsp;1;<br />
<span style="color: #008080; ">141</span>&nbsp;<br />
<span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(winop);<br />
<span style="color: #008080; ">143</span>&nbsp;&nbsp;err:<br />
<span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFREE(winop-&gt;readset_in);<br />
<span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFREE(winop-&gt;writeset_in);<br />
<span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFREE(winop-&gt;readset_out);<br />
<span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFREE(winop-&gt;writeset_out);<br />
<span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFREE(winop-&gt;exset_out);<br />
<span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XFREE(winop);<br />
<span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(NULL);<br />
<span style="color: #008080; ">151</span>&nbsp;}<br />
<span style="color: #008080; ">152</span>&nbsp;<br />
<span style="color: #008080; ">153</span>&nbsp;<span style="color: #0000FF; ">int</span><br />
<span style="color: #008080; ">154</span>&nbsp;win32_add(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*<span style="color: #0000FF; ">base</span>,&nbsp;evutil_socket_t&nbsp;fd,<br />
<span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;old,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;events,&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*_idx)<br />
<span style="color: #008080; ">156</span>&nbsp;{<br />
<span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*win32op&nbsp;=&nbsp;<span style="color: #0000FF; ">base</span>-&gt;evbase;<br />
<span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;idx_info&nbsp;*idx&nbsp;=&nbsp;_idx;<br />
<span style="color: #008080; ">159</span>&nbsp;<br />
<span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((events&nbsp;&amp;&nbsp;EV_SIGNAL)&nbsp;&amp;&amp;&nbsp;win32op-&gt;signals_are_broken)<br />
<span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">162</span>&nbsp;<br />
<span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(events&nbsp;&amp;&nbsp;(EV_READ|EV_WRITE)))<br />
<span style="color: #008080; ">164</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">165</span>&nbsp;<br />
<span style="color: #008080; ">166</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_debug(("%s:&nbsp;adding&nbsp;event&nbsp;for&nbsp;%d",&nbsp;__func__,&nbsp;(<span style="color: #0000FF; ">int</span>)fd));<br />
<span style="color: #008080; ">167</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(events&nbsp;&amp;&nbsp;EV_READ)&nbsp;{<br />
<span style="color: #008080; ">168</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(do_fd_set(win32op,&nbsp;idx,&nbsp;fd,&nbsp;1)&lt;0)<br />
<span style="color: #008080; ">169</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">171</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(events&nbsp;&amp;&nbsp;EV_WRITE)&nbsp;{<br />
<span style="color: #008080; ">172</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(do_fd_set(win32op,&nbsp;idx,&nbsp;fd,&nbsp;0)&lt;0)<br />
<span style="color: #008080; ">173</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">176</span>&nbsp;}<br />
<span style="color: #008080; ">177</span>&nbsp;<br />
<span style="color: #008080; ">178</span>&nbsp;<span style="color: #0000FF; ">int</span><br />
<span style="color: #008080; ">179</span>&nbsp;win32_del(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*<span style="color: #0000FF; ">base</span>,&nbsp;evutil_socket_t&nbsp;fd,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;old,&nbsp;<span style="color: #0000FF; ">short</span>&nbsp;events,<br />
<span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;*_idx)<br />
<span style="color: #008080; ">181</span>&nbsp;{<br />
<span style="color: #008080; ">182</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*win32op&nbsp;=&nbsp;<span style="color: #0000FF; ">base</span>-&gt;evbase;<br />
<span style="color: #008080; ">183</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;idx_info&nbsp;*idx&nbsp;=&nbsp;_idx;<br />
<span style="color: #008080; ">184</span>&nbsp;<br />
<span style="color: #008080; ">185</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_debug(("%s:&nbsp;Removing&nbsp;event&nbsp;for&nbsp;"EV_SOCK_FMT,<br />
<span style="color: #008080; ">186</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__func__,&nbsp;EV_SOCK_ARG(fd)));<br />
<span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(events&nbsp;&amp;&nbsp;EV_READ)<br />
<span style="color: #008080; ">188</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_fd_clear(<span style="color: #0000FF; ">base</span>,&nbsp;win32op,&nbsp;idx,&nbsp;1);<br />
<span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(events&nbsp;&amp;&nbsp;EV_WRITE)<br />
<span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_fd_clear(<span style="color: #0000FF; ">base</span>,&nbsp;win32op,&nbsp;idx,&nbsp;0);<br />
<span style="color: #008080; ">191</span>&nbsp;<br />
<span style="color: #008080; ">192</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">193</span>&nbsp;}<br />
<span style="color: #008080; ">194</span>&nbsp;<br />
<span style="color: #008080; ">195</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span><br />
<span style="color: #008080; ">196</span>&nbsp;fd_set_copy(<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*<span style="color: #0000FF; ">out</span>,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win_fd_set&nbsp;*<span style="color: #0000FF; ">in</span>)<br />
<span style="color: #008080; ">197</span>&nbsp;{<br />
<span style="color: #008080; ">198</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">out</span>-&gt;fd_count&nbsp;=&nbsp;<span style="color: #0000FF; ">in</span>-&gt;fd_count;<br />
<span style="color: #008080; ">199</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(<span style="color: #0000FF; ">out</span>-&gt;fd_array,&nbsp;<span style="color: #0000FF; ">in</span>-&gt;fd_array,&nbsp;<span style="color: #0000FF; ">in</span>-&gt;fd_count&nbsp;*&nbsp;(<span style="color: #0000FF; ">sizeof</span>(SOCKET)));<br />
<span style="color: #008080; ">200</span>&nbsp;}<br />
<span style="color: #008080; ">201</span>&nbsp;<br />
<span style="color: #008080; ">202</span>&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">203</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;static&nbsp;void&nbsp;dump_fd_set(struct&nbsp;win_fd_set&nbsp;*s)<br />
</span><span style="color: #008080; ">204</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;{<br />
</span><span style="color: #008080; ">205</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />
</span><span style="color: #008080; ">206</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;printf("[&nbsp;");<br />
</span><span style="color: #008080; ">207</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;for(i=0;i&lt;s-&gt;fd_count;++i)<br />
</span><span style="color: #008080; ">208</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;printf("%d&nbsp;",(int)s-&gt;fd_array[i]);<br />
</span><span style="color: #008080; ">209</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;printf("]\n");<br />
</span><span style="color: #008080; ">210</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">211</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">212</span>&nbsp;<br />
<span style="color: #008080; ">213</span>&nbsp;<span style="color: #0000FF; ">int</span><br />
<span style="color: #008080; ">214</span>&nbsp;win32_dispatch(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*<span style="color: #0000FF; ">base</span>,&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;*tv)<br />
<span style="color: #008080; ">215</span>&nbsp;{<br />
<span style="color: #008080; ">216</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*win32op&nbsp;=&nbsp;<span style="color: #0000FF; ">base</span>-&gt;evbase;<br />
<span style="color: #008080; ">217</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">218</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;j,&nbsp;i;<br />
<span style="color: #008080; ">219</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fd_count;<br />
<span style="color: #008080; ">220</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOCKET&nbsp;s;<br />
<span style="color: #008080; ">221</span>&nbsp;<br />
<span style="color: #008080; ">222</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;resize_out_sets)&nbsp;{<br />
<span style="color: #008080; ">223</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;size&nbsp;=&nbsp;FD_SET_ALLOC_SIZE(win32op-&gt;num_fds_in_fd_sets);<br />
<span style="color: #008080; ">224</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(win32op-&gt;readset_out&nbsp;=&nbsp;mm_realloc(win32op-&gt;readset_out,&nbsp;size)))<br />
<span style="color: #008080; ">225</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">226</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(win32op-&gt;exset_out&nbsp;=&nbsp;mm_realloc(win32op-&gt;exset_out,&nbsp;size)))<br />
<span style="color: #008080; ">227</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">228</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!(win32op-&gt;writeset_out&nbsp;=&nbsp;mm_realloc(win32op-&gt;writeset_out,&nbsp;size)))<br />
<span style="color: #008080; ">229</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(-1);<br />
<span style="color: #008080; ">230</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32op-&gt;resize_out_sets&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">231</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">232</span>&nbsp;<br />
<span style="color: #008080; ">233</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set_copy(win32op-&gt;readset_out,&nbsp;win32op-&gt;readset_in);<br />
<span style="color: #008080; ">234</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set_copy(win32op-&gt;exset_out,&nbsp;win32op-&gt;writeset_in);<br />
<span style="color: #008080; ">235</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_set_copy(win32op-&gt;writeset_out,&nbsp;win32op-&gt;writeset_in);<br />
<span style="color: #008080; ">236</span>&nbsp;<br />
<span style="color: #008080; ">237</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fd_count&nbsp;=<br />
<span style="color: #008080; ">238</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(win32op-&gt;readset_out-&gt;fd_count&nbsp;&gt;&nbsp;win32op-&gt;writeset_out-&gt;fd_count)&nbsp;?<br />
<span style="color: #008080; ">239</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win32op-&gt;readset_out-&gt;fd_count&nbsp;:&nbsp;win32op-&gt;writeset_out-&gt;fd_count;<br />
<span style="color: #008080; ">240</span>&nbsp;<br />
<span style="color: #008080; ">241</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!fd_count)&nbsp;{<br />
<span style="color: #008080; ">242</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;msec&nbsp;=&nbsp;tv&nbsp;?&nbsp;evutil_tv_to_msec(tv)&nbsp;:&nbsp;LONG_MAX;<br />
<span style="color: #008080; ">243</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Sleep's&nbsp;DWORD&nbsp;argument&nbsp;is&nbsp;unsigned&nbsp;long&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">244</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(msec&nbsp;&lt;&nbsp;0)<br />
<span style="color: #008080; ">245</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msec&nbsp;=&nbsp;LONG_MAX;<br />
<span style="color: #008080; ">246</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Windows&nbsp;doesn't&nbsp;like&nbsp;you&nbsp;to&nbsp;call&nbsp;select()&nbsp;with&nbsp;no&nbsp;sockets&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">247</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(msec);<br />
<span style="color: #008080; ">248</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">249</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">250</span>&nbsp;<br />
<span style="color: #008080; ">251</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVBASE_RELEASE_LOCK(<span style="color: #0000FF; ">base</span>,&nbsp;th_base_lock);<br />
<span style="color: #008080; ">252</span>&nbsp;<br />
<span style="color: #008080; ">253</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;select(fd_count,<br />
<span style="color: #008080; ">254</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">struct</span>&nbsp;fd_set*)win32op-&gt;readset_out,<br />
<span style="color: #008080; ">255</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">struct</span>&nbsp;fd_set*)win32op-&gt;writeset_out,<br />
<span style="color: #008080; ">256</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">struct</span>&nbsp;fd_set*)win32op-&gt;exset_out,&nbsp;tv);<br />
<span style="color: #008080; ">257</span>&nbsp;<br />
<span style="color: #008080; ">258</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EVBASE_ACQUIRE_LOCK(<span style="color: #0000FF; ">base</span>,&nbsp;th_base_lock);<br />
<span style="color: #008080; ">259</span>&nbsp;<br />
<span style="color: #008080; ">260</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_debug(("%s:&nbsp;select&nbsp;returned&nbsp;%d",&nbsp;__func__,&nbsp;res));<br />
<span style="color: #008080; ">261</span>&nbsp;<br />
<span style="color: #008080; ">262</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;&lt;=&nbsp;0)&nbsp;{<br />
<span style="color: #008080; ">263</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;res;<br />
<span style="color: #008080; ">264</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">265</span>&nbsp;<br />
<span style="color: #008080; ">266</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;readset_out-&gt;fd_count)&nbsp;{<br />
<span style="color: #008080; ">267</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;rand()&nbsp;%&nbsp;win32op-&gt;readset_out-&gt;fd_count;<br />
<span style="color: #008080; ">268</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(j=0;&nbsp;j&lt;win32op-&gt;readset_out-&gt;fd_count;&nbsp;++j)&nbsp;{<br />
<span style="color: #008080; ">269</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(++i&nbsp;&gt;=&nbsp;win32op-&gt;readset_out-&gt;fd_count)<br />
<span style="color: #008080; ">270</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">271</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;win32op-&gt;readset_out-&gt;fd_array[i];<br />
<span style="color: #008080; ">272</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evmap_io_active(<span style="color: #0000FF; ">base</span>,&nbsp;s,&nbsp;EV_READ);<br />
<span style="color: #008080; ">273</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">274</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">275</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;exset_out-&gt;fd_count)&nbsp;{<br />
<span style="color: #008080; ">276</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;rand()&nbsp;%&nbsp;win32op-&gt;exset_out-&gt;fd_count;<br />
<span style="color: #008080; ">277</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(j=0;&nbsp;j&lt;win32op-&gt;exset_out-&gt;fd_count;&nbsp;++j)&nbsp;{<br />
<span style="color: #008080; ">278</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(++i&nbsp;&gt;=&nbsp;win32op-&gt;exset_out-&gt;fd_count)<br />
<span style="color: #008080; ">279</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">280</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;win32op-&gt;exset_out-&gt;fd_array[i];<br />
<span style="color: #008080; ">281</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evmap_io_active(<span style="color: #0000FF; ">base</span>,&nbsp;s,&nbsp;EV_WRITE);<br />
<span style="color: #008080; ">282</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">283</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">284</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;writeset_out-&gt;fd_count)&nbsp;{<br />
<span style="color: #008080; ">285</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SOCKET&nbsp;s;<br />
<span style="color: #008080; ">286</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;rand()&nbsp;%&nbsp;win32op-&gt;writeset_out-&gt;fd_count;<br />
<span style="color: #008080; ">287</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(j=0;&nbsp;j&lt;win32op-&gt;writeset_out-&gt;fd_count;&nbsp;++j)&nbsp;{<br />
<span style="color: #008080; ">288</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(++i&nbsp;&gt;=&nbsp;win32op-&gt;writeset_out-&gt;fd_count)<br />
<span style="color: #008080; ">289</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">290</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;win32op-&gt;writeset_out-&gt;fd_array[i];<br />
<span style="color: #008080; ">291</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evmap_io_active(<span style="color: #0000FF; ">base</span>,&nbsp;s,&nbsp;EV_WRITE);<br />
<span style="color: #008080; ">292</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">293</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">294</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(0);<br />
<span style="color: #008080; ">295</span>&nbsp;}<br />
<span style="color: #008080; ">296</span>&nbsp;<br />
<span style="color: #008080; ">297</span>&nbsp;<span style="color: #0000FF; ">void</span><br />
<span style="color: #008080; ">298</span>&nbsp;win32_dealloc(<span style="color: #0000FF; ">struct</span>&nbsp;event_base&nbsp;*_base)<br />
<span style="color: #008080; ">299</span>&nbsp;{<br />
<span style="color: #008080; ">300</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;win32op&nbsp;*win32op&nbsp;=&nbsp;_base-&gt;evbase;<br />
<span style="color: #008080; ">301</span>&nbsp;<br />
<span style="color: #008080; ">302</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evsig_dealloc(_base);<br />
<span style="color: #008080; ">303</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;readset_in)<br />
<span style="color: #008080; ">304</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm_free(win32op-&gt;readset_in);<br />
<span style="color: #008080; ">305</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;writeset_in)<br />
<span style="color: #008080; ">306</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm_free(win32op-&gt;writeset_in);<br />
<span style="color: #008080; ">307</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;readset_out)<br />
<span style="color: #008080; ">308</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm_free(win32op-&gt;readset_out);<br />
<span style="color: #008080; ">309</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;writeset_out)<br />
<span style="color: #008080; ">310</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm_free(win32op-&gt;writeset_out);<br />
<span style="color: #008080; ">311</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(win32op-&gt;exset_out)<br />
<span style="color: #008080; ">312</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm_free(win32op-&gt;exset_out);<br />
<span style="color: #008080; ">313</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;XXXXX&nbsp;free&nbsp;the&nbsp;tree.&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">314</span>&nbsp;<br />
<span style="color: #008080; ">315</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(win32op,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(win32op));<br />
<span style="color: #008080; ">316</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm_free(win32op);<br />
<span style="color: #008080; ">317</span>&nbsp;}</div>
</div>
<img src ="http://www.cppblog.com/xvsdf100/aggbug/204689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-12-10 14:20 <a href="http://www.cppblog.com/xvsdf100/archive/2013/12/10/204689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今目标签退软件（方便一些人吧）</title><link>http://www.cppblog.com/xvsdf100/archive/2013/11/22/204384.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Fri, 22 Nov 2013 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/11/22/204384.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/204384.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/11/22/204384.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/204384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/204384.html</trackback:ping><description><![CDATA[这个软件其实写一段时间，共享百度网盘里面。貌似还蛮多使用这个软件，如是公布在c++博客园，可能使用今目标 搞it的人会多一些。<br />注意不要使用中文帐号登录，当初没有注意这个问题，后面一个用户反映说登录不上，后面我也懒的该，只要叫他用绑定邮箱登录。<br /><a href="http://pan.baidu.com/s/1eKGYx">http://pan.baidu.com/s/1eKGYx<br /></a>最研究libevent源代码，感觉别人组织器数据结构就自然漂亮，看来自己要多多加强这方面的研究。<img src ="http://www.cppblog.com/xvsdf100/aggbug/204384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-11-22 16:58 <a href="http://www.cppblog.com/xvsdf100/archive/2013/11/22/204384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Autocad ObjectArx开发-----------&gt;Cad Hello World(一f)</title><link>http://www.cppblog.com/xvsdf100/archive/2013/11/11/204204.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 11 Nov 2013 02:14:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/11/11/204204.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/204204.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/11/11/204204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/204204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/204204.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;AcRx::AppRetCode&nbsp;On_kInitAppMsg&nbsp;(<span style="color: #0000FF; ">void</span>&nbsp;*pkt)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Load&nbsp;dependencies&nbsp;here<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;You&nbsp;*must*&nbsp;call&nbsp;On_kInitAppMsg&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AcRx::AppRetCode&nbsp;retCode&nbsp;=AcRxArxApp::On_kInitAppMsg&nbsp;(pkt)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;initialization&nbsp;code&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acutPrintf(L"hello&nbsp;world");<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(retCode)&nbsp;;</div>
<span style="font-size: 13px; color: #008080;">10</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;&nbsp;&nbsp;&nbsp;}</span>我首先进入vs(我的vs2008)创建工程：<br />
<img src="http://www.cppblog.com/images/cppblog_com/xvsdf100/QQ截图20131111093851.png" border="0" alt="" width="804" height="610" /><br />
因为我安装了ObjectArx Wizard 所以就会在创建工程时候出现ObjextArx ，然后选择，输入你的工程名点击确定。<br />
我们会看到一个要你选择界面。<br />
<img src="http://www.cppblog.com/images/cppblog_com/xvsdf100/QQ截图20131111093919.png" border="0" alt="" width="615" height="520" /><br />
Your Registered 那里我一般都没有填，貌似类似空间命名空间，你想填什么就填什么，估计为了排除不同arx的冲突吧。<br />
我一般都会选择支持MFC，因为这样他同时也支持com，因为我们在开发时候界面一般也会用MFC ，所以最好选择支持MFC。<br />
<img src="http://www.cppblog.com/images/cppblog_com/xvsdf100/QQ截图20131111093942.png" border="0" alt="" width="605" height="488" /><br />
然后你点击Finish就可以了。<br />
<br />
这样一个ObjectArx的工程就创建好了，现在就开始我们写代码了。<br />
<img src="http://www.cppblog.com/images/cppblog_com/xvsdf100/QQ截图20131111094014.png" border="0" alt="" width="166" height="29" />这个cpp 里面类就相当于我们c/c++ main 函数。<br />
其实给我感觉就和mfc才不多，只是把main 封装在最里面，我们MFC开发时候也是看不到main，我们的代码就是在一个类里面写。所以这里也差不多的。<br />
我们可以看出这段代码：<span style="font-size: 13px; color: #008080;">&nbsp;1</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 13px; color: #0000ff;">virtual</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;AcRx::AppRetCode&nbsp;On_kInitAppMsg&nbsp;(</span><span style="font-size: 13px; color: #0000ff;">void</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;</span><span style="background-color: #eeeeee; font-size: 13px;">*</span><span style="background-color: #eeeeee; font-size: 13px;">pkt)&nbsp;{</span><br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Load&nbsp;dependencies&nbsp;here<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;You&nbsp;*must*&nbsp;call&nbsp;On_kInitAppMsg&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AcRx::AppRetCode&nbsp;retCode&nbsp;=AcRxArxApp::On_kInitAppMsg&nbsp;(pkt)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;initialization&nbsp;code&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(retCode)&nbsp;;<br />
<span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">11</span>&nbsp;<br />
<span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;AcRx::AppRetCode&nbsp;On_kUnloadAppMsg&nbsp;(<span style="color: #0000FF; ">void</span>&nbsp;*pkt)&nbsp;{<br />
<span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;code&nbsp;here<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;You&nbsp;*must*&nbsp;call&nbsp;On_kUnloadAppMsg&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AcRx::AppRetCode&nbsp;retCode&nbsp;=AcRxArxApp::On_kUnloadAppMsg&nbsp;(pkt)&nbsp;;<br />
<span style="color: #008080; ">17</span>&nbsp;<br />
<span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Unload&nbsp;dependencies&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(retCode)&nbsp;;<br />
<span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div>
这个2个函数显然是一个初始化（加载时候），一个卸载时候调用的。<br />
<br />
现在我们开始添加代码。来打印hello world<br />
在virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt)函数中添加一句&nbsp;acutPrintf(L"hello world");<br />
<div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;AcRx::AppRetCode&nbsp;On_kInitAppMsg&nbsp;(<span style="color: #0000FF; ">void</span>&nbsp;*pkt)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Load&nbsp;dependencies&nbsp;here<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;You&nbsp;*must*&nbsp;call&nbsp;On_kInitAppMsg&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AcRx::AppRetCode&nbsp;retCode&nbsp;=AcRxArxApp::On_kInitAppMsg&nbsp;(pkt)&nbsp;;<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO:&nbsp;Add&nbsp;your&nbsp;initialization&nbsp;code&nbsp;here</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acutPrintf(L"hello&nbsp;world");<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(retCode)&nbsp;;<br />
<span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div>
</div>
然后我们我就可以导入cad进行测试了。
打开对应版本的cad ,如果你是ObjectArx 2012那么你就只能用cad 2012.我不知道为什么cad不向下兼容。。<br />在cad命令框里面输入APPLOAD,然后选择到我们生成的arx。<br />让后cad命令框就出现：命令: APPLOAD<div>hello world已成功加载 CadHelloWorld.arx。<br />看见到久违hello world.<br />这个是简单告诉新手怎么弄，最好是自己去看张帆 ----------ObjectARX开发实例教程他说东西。</div><img src ="http://www.cppblog.com/xvsdf100/aggbug/204204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-11-11 10:14 <a href="http://www.cppblog.com/xvsdf100/archive/2013/11/11/204204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Autocad ObjectArx开发-----------&gt;环境搭建</title><link>http://www.cppblog.com/xvsdf100/archive/2013/11/11/204202.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 11 Nov 2013 01:33:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/11/11/204202.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/204202.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/11/11/204202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/204202.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/204202.html</trackback:ping><description><![CDATA[以前是做脱离autocad的环境下能够生成dwg图,我们那时候用Teigha 这个库，貌似是国外一个公司通过对Autocad反汇编得出来的，不过跟ObjectArx比较相似。但Teigha封装非常好。<br /><br />开始环境简单搭建和可能遇到的问题。<br /><br />1：可以去这个论坛下所有版本的Arx &nbsp;http://www.objectarx.net/forum.php<br /><br />2: 如果你下载的2010版本以上压缩包里面没有Arx Winzard 这样你的vs就没有对应Arx的引导，非常不方便。 虽然我们可以完全自己创建一个这样工程，<br />我可能去cad 官网去下：http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;id=1911627<br /><br />3：如果你vs中ObjectArx工具条不显示图标的话，可以百度一下忘记是在哪个网站下载了，要豆豆的网站。然后解压到对应文件夹名字就可以了。<br /><br />cad安装问题：<br />cad软件安装安装不上也是一种比较常见问题。<br />我就用半天时间才装好，装好我都不知道具体用哪个方法装好的。我通过百度和自己分析一般cad 装不好的原因就只有几个。<br />1：路径不能含有中文。<br />2：你的cad名字太长。<br />3：vc 2005 运行库 安装不上。------------------》我就是这个问题。 我的cad在安装第三方库时候总是失败，我觉得大多数都应该是运行库安装失败引起，你最好先把vc2005卸载掉，然后单独重装，如果没有报错的话，应该就没有问题了。<br /><br />书籍：ObjectARX开发实例教程----张帆。 &nbsp;貌似我就看到这样一本书籍，但这本还是显得太老了。貌似说的arx 2004版本。这样就导致里面一些内容我们根本就不能按照里面做了。<br />所以接下来几篇文章就是怎么用vs2008 和 arx 20012来开发几个常见界面插件了，相当于一个整理，因为我上周才花三天时间学习ObjectArx 开发，所以我遇到的问题大多人开始学习都会遇到的。<img src ="http://www.cppblog.com/xvsdf100/aggbug/204202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-11-11 09:33 <a href="http://www.cppblog.com/xvsdf100/archive/2013/11/11/204202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天发布了用Arcgis Server 的Web </title><link>http://www.cppblog.com/xvsdf100/archive/2013/07/29/202216.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 29 Jul 2013 03:31:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/07/29/202216.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/202216.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/07/29/202216.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/202216.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/202216.html</trackback:ping><description><![CDATA[研究2~3个信息的ArcGis Server，对于一个从来没有接触过GIS Server的人 入门真心头痛，书籍真心少。都不知道到哪里去找资料。<br />现在总算稍微郁闷，对代码，整体架构都有所了解。<br /><br />现在先把一个简单坏境搭出来了然后根据需求进行修改就可以了。<br />加油。。。。<br /><br /><br /><br /><hr />这篇文章没有任何技术，只是当做自己日记稍微记录一下。<br /><br />虽然才毕业几个月，感觉激情就没有那么大。工资还可以，工作比较稳定，但这些都不是我看重。<br />如果明年公司发展的比较好，我就在这个公司好好干下去，如果还是老样子，我早点走，看看外面的世界，不想把自己激情消灭殆尽。<br /><br />自从接了别人外包项目，把自己搞的累死，感觉24小时工作，后面休息2个星期。把自己做养懒了。<br />这点对自己非常不满意，在学校的时候几乎每天都在写代码。每天的都在进步。<br />但看最近的几个月进步很少。<br />可能怎么做人懂了一些了吧。<br />每天给自己一个目标，要自己一点点进步。无论是技术还是做人，还是更好学会生活。<br />code code up and day day up<img src ="http://www.cppblog.com/xvsdf100/aggbug/202216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-07-29 11:31 <a href="http://www.cppblog.com/xvsdf100/archive/2013/07/29/202216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#对excel 图表操作</title><link>http://www.cppblog.com/xvsdf100/archive/2013/07/01/201419.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Mon, 01 Jul 2013 04:50:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/07/01/201419.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/201419.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/07/01/201419.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/201419.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/201419.html</trackback:ping><description><![CDATA[由于公司一个项目要用到excel的图表，如是这个任务自然落到我这个全能型码农的身上了（~~~^_^~~~ ，自恋一下）。<br />
实现IDL对excel对图表的操作，因为对IDL编程不熟悉（没有学过，看过几行代码后写过IDL代码而已，任何语言感觉差不多，学了c/c++ 其他的语言都是浮云）。<br />
如是我就先用c#对excel 进行操作，因为简单。（哪个语言对开发东西简单自然用哪个）。<br />
<br />
网上例子真少。。。。。可以说对图表几乎没有，只能通过office的宏来分析怎么写代。<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;System;<br />
<span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;System.Collections.Generic;<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;System.Linq;<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;System.Text;<br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;MSExcel&nbsp;=&nbsp;Microsoft.Office.Interop.Excel;<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;System.IO;<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;System.Reflection;<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;<br />
<span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;操作Excel<br />
<span style="color: #008080; ">11</span>&nbsp;{<br />
<span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Program<br />
<span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Main(<span style="color: #0000FF; ">string</span>[]&nbsp;args)<br />
<span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Application&nbsp;excelApp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Excel应用程序变量&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Workbooks&nbsp;excelDoc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Excel文档变量&nbsp;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excelApp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MSExcel.ApplicationClass();<br />
<span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;path&nbsp;=&nbsp;@"F:\23.xls";<br />
<span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;Nothing&nbsp;=&nbsp;Missing.Value;<br />
<span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excelDoc&nbsp;=&nbsp;excelApp.Workbooks;<br />
<span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excelApp.ShowStartupDialog&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />
<span style="color: #008080; ">24</span>&nbsp;<br />
<span style="color: #008080; ">25</span>&nbsp;<br />
<span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel::Workbook&nbsp;doc&nbsp;=&nbsp;excelDoc.Open(path,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing,&nbsp;Nothing);<br />
<span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">null</span>&nbsp;==&nbsp;doc)<br />
<span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />
<span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">31</span>&nbsp;<br />
<span style="color: #008080; ">32</span>&nbsp;<br />
<span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Worksheet&nbsp;ws&nbsp;=&nbsp;(MSExcel.Worksheet)doc.Sheets[1];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">索引从1开始&nbsp;，难道c#&nbsp;我用c#不熟悉</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />
<span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">37</span>&nbsp;<br />
<span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Worksheet&nbsp;ws2&nbsp;=&nbsp;&nbsp;((MSExcel.Worksheet)excelApp.ActiveSheet);<br />
<span style="color: #008080; ">39</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">这里我找了好就才知道要用ChartObject&nbsp;来接，我开始用Chart&nbsp;,_Chat都不行，注意了</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.ChartObject&nbsp;c&nbsp;=&nbsp;(MSExcel.ChartObject)ws2.ChartObjects("Chart&nbsp;1");<br />
<span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.Activate();<br />
<span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Chart&nbsp;chart1&nbsp;=&nbsp;excelApp.ActiveChart;<br />
<span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("{0}",&nbsp;chart1.ChartTitle.Text);<br />
<span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chart1.ChartTitle.Text&nbsp;=&nbsp;"hello&nbsp;world";<span style="color: #008000; ">//</span><span style="color: #008000; ">设置标题<br />
</span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置&nbsp;x,y轴。</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel::Axis&nbsp;aa&nbsp;=&nbsp;(MSExcel::Axis)chart1.Axes(2,&nbsp;Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);<br />
<span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">aa.MinimumScale&nbsp;=&nbsp;341;</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa.MaximumScale&nbsp;=&nbsp;370;<br />
<span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel::Axis&nbsp;bb&nbsp;=&nbsp;(MSExcel::Axis)chart1.Axes(1,&nbsp;Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary);<br />
<span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bb.MinimumScale&nbsp;=&nbsp;0.5;<br />
<span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(System.Exception&nbsp;ex)<br />
<span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("{0}",&nbsp;ex.Message);<br />
<span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">59</span>&nbsp;<br />
<span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br />
<span style="color: #008080; ">63</span>&nbsp;<br />
<span style="color: #008080; ">64</span>&nbsp;<br />
<span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">////////////////////////////////////////////////////////////////////////</span><span style="color: #008000; ">//</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">66</span>&nbsp;<span style="color: #808080; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;对表格进行修改<br />
</span><span style="color: #008080; ">67</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;MSExcel.Range&nbsp;r;<br />
</span><span style="color: #008080; ">68</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;r&nbsp;=&nbsp;ws.get_Range("c5",&nbsp;"c5");<br />
</span><span style="color: #008080; ">69</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;r.Value2&nbsp;=&nbsp;1234;<br />
</span><span style="color: #008080; ">70</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//<br />
</span><span style="color: #008080; ">71</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">////////////////////////////////////////////////////////////////////////</span><span style="color: #008000; ">//</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">72</span>&nbsp;<span style="color: #808080; "></span><br />
<span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Close(Nothing,&nbsp;Nothing,&nbsp;Nothing);<br />
<span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">excelApp.Save(Nothing);</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excelApp.Quit();<br />
<span style="color: #008080; ">76</span>&nbsp;<br />
<span style="color: #008080; ">77</span>&nbsp;<br />
<span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<span style="color: #008080; ">79</span>&nbsp;<br />
<span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">82</span>&nbsp;}<br />
<span style="color: #008080; ">83</span>&nbsp;</div>
附上IDL的代码，或许会帮到IDL编程的人。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;;&nbsp;&nbsp;&nbsp;GetAllDataFromCurrentWorksheet&nbsp;Method.&nbsp;Returns&nbsp;all&nbsp;valid,&nbsp;contiguous&nbsp;data<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stored&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;currently&nbsp;selected&nbsp;worksheet<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Example:<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oIDL_Excel&nbsp;=&nbsp;obj_new("ITCffExcel",&nbsp;fileName,&nbsp;SHEET='irreg_grid1')<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;oIDL_Excel-&gt;GetAllDataFromCurrentWorksheet()<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;;-<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;FUNCTION&nbsp;ITCffExcel::GetAllDataFromCurrentWorksheet<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On_Error,&nbsp;2<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Obj_Valid(self.oCellRange))&nbsp;THEN&nbsp;Obj_Destroy,&nbsp;self.oCellRange<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;Usedrange&nbsp;=&nbsp;oUsedCells<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oUsedCells<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange-&gt;GetProperty,&nbsp;Value&nbsp;=&nbsp;myValues<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Size(myValues,&nbsp;/Type)&nbsp;EQ&nbsp;0)&nbsp;THEN&nbsp;BEGIN&nbsp;;&nbsp;undefined<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message,&nbsp;'Invalid&nbsp;Range&nbsp;'+range+'?&nbsp;Mixed&nbsp;data&nbsp;types&nbsp;not&nbsp;supported.'+&nbsp;$<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;Data&nbsp;must&nbsp;be&nbsp;numeric&nbsp;and&nbsp;contiguous.',&nbsp;/Ioerror<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;BEGIN<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Rearrange&nbsp;into&nbsp;IDL&nbsp;column-major&nbsp;format&nbsp;so&nbsp;user&nbsp;doesn't&nbsp;have&nbsp;to<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dims&nbsp;=&nbsp;Size(myValues,&nbsp;/Dimensions)<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myValues&nbsp;=&nbsp;Transpose(Reform(Temporary(myValues),&nbsp;dims[1],&nbsp;dims[0]))<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return,&nbsp;myValues<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDELSE<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;END<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;pro&nbsp;ITCffExcel::SetChart,inputRange<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;;&nbsp;self.oSheet-&gt;GetProperty,Shapes&nbsp;=&nbsp;MyShapes<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;;MyShapes-&gt;AddChart<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;self.oExcel-&gt;GetProperty,Charts&nbsp;=&nbsp;MyChart<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;MyChart-&gt;add<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;;获得刚刚添加的表,对它进行设置<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;self.oExcel-&gt;GetProperty,ActiveChart&nbsp;=&nbsp;MyActiveChart<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;;又要获取ChartType&nbsp;进行赋值<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;MyActiveChart-&gt;GetProperty,ChartType&nbsp;=&nbsp;MyChartType<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;MyChartType&nbsp;=&nbsp;51&nbsp;;这个值我是通过看C#代码跟进去看到&nbsp;。不想获取对象来获取<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;;设置数据源<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Obj_Valid(self.oCellRange))&nbsp;THEN&nbsp;Obj_Destroy,&nbsp;self.oCellRange<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Size(inputRange,&nbsp;/Dimensions)&nbsp;EQ&nbsp;2)&nbsp;THEN&nbsp;BEGIN<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange[0],&nbsp;inputRange[1],&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;BEGIN<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange,&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDELSE<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;MyActiveChart-&gt;SetSourceData,self.oCellRange,2<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;MyActiveChart-&gt;Location,2,"sheet1"<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;END<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;;;;设置图表标题<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;pro&nbsp;ITCffExcel::SetChartTitle,strTitle<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyChart&nbsp;=&nbsp;self.oSheet-&gt;ChartObjects("Chart&nbsp;1")&nbsp;<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyChart-&gt;Activate<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oExcel-&gt;GetProperty,ActiveChart&nbsp;=&nbsp;MyActiveChart<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyActiveChart-&gt;GetProperty,ChartTitle&nbsp;=&nbsp;ChatTitle<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChatTitle-&gt;SetProperty,Text&nbsp;=&nbsp;strTitle<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;END<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;;&nbsp;删除指定表格。这样就可以就填充了。<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;;<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;pro&nbsp;ITCffExcel::DeleteChart,inputRange<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Obj_Valid(self.oCellRange))&nbsp;THEN&nbsp;Obj_Destroy,&nbsp;self.oCellRange<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Size(inputRange,&nbsp;/Dimensions)&nbsp;EQ&nbsp;2)&nbsp;THEN&nbsp;BEGIN<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange[0],&nbsp;inputRange[1],&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;BEGIN<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange,&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDELSE<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;进行删除<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;self.oCellRange-&gt;GetProperty,Select&nbsp;=&nbsp;MySelect<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjSelect&nbsp;=&nbsp;self.oCellRange-&gt;Select()<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;ObjSelect-&gt;Delete<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange-&gt;Delete<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;;MyActiveChart-&gt;SetSourceData,self.oCellRange,2<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;;MyActiveChart-&gt;Location,2,"sheet1"<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;END<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;<br /><span style="color: #008080; ">100</span>&nbsp;;;设置y轴的属性<br /><span style="color: #008080; ">101</span>&nbsp;;XorY&nbsp;:&nbsp;0&nbsp;代表设置&nbsp;x&nbsp;,&nbsp;1&nbsp;代表设置y<br /><span style="color: #008080; ">102</span>&nbsp;;MaximumScale：最大值<br /><span style="color: #008080; ">103</span>&nbsp;;MinimumScale:&nbsp;最小值<br /><span style="color: #008080; ">104</span>&nbsp;;MinorUnit:&nbsp;最小刻度<br /><span style="color: #008080; ">105</span>&nbsp;;self.oSheet&nbsp;<br /><span style="color: #008080; ">106</span>&nbsp;PRO&nbsp;ITCffExcel::SetXYAxes,&nbsp;XorY,nMaximumScale,nMinimumScale,nMajorUnit<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;MyChart&nbsp;=&nbsp;self.oSheet-&gt;ChartObjects("Chart&nbsp;1")&nbsp;<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;MyChart-&gt;Activate<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;self.oExcel-&gt;GetProperty,ActiveChart&nbsp;=&nbsp;MyActiveChart<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(XorY&nbsp;EQ&nbsp;0)then&nbsp;&nbsp;begin<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;Axis&nbsp;=&nbsp;MyActiveChart-&gt;Axes(1,1)<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;endif&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;begin<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;Axis&nbsp;=&nbsp;MyActiveChart-&gt;Axes(2,1)<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;endelse<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;;Axis-&gt;GetProperty,MaximumScale&nbsp;=&nbsp;MyMaximumScale<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;Axis-&gt;SetProperty,MaximumScale&nbsp;=&nbsp;nMaximumScale<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;Axis-&gt;SetProperty,MinimumScale&nbsp;=&nbsp;nMinimumScale<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;Axis-&gt;SetProperty,MajorUnit&nbsp;=&nbsp;nMajorUnit<br /><span style="color: #008080; ">120</span>&nbsp;<br /><span style="color: #008080; ">121</span>&nbsp;End<br /><span style="color: #008080; ">122</span>&nbsp;<br /><span style="color: #008080; ">123</span>&nbsp;<br /><span style="color: #008080; ">124</span>&nbsp;<br /><span style="color: #008080; ">125</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">126</span>&nbsp;;<br /><span style="color: #008080; ">127</span>&nbsp;;保存文件<br /><span style="color: #008080; ">128</span>&nbsp;;<br /><span style="color: #008080; ">129</span>&nbsp;PRO&nbsp;ITCffExcel::Save,&nbsp;fileName<br /><span style="color: #008080; ">130</span>&nbsp;<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">132</span>&nbsp;<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;N_Elements(fileName)&nbsp;EQ&nbsp;0&nbsp;THEN&nbsp;fileName&nbsp;=&nbsp;self.fileName<br /><span style="color: #008080; ">134</span>&nbsp;<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookData-&gt;SaveAs,&nbsp;fileName<br /><span style="color: #008080; ">136</span>&nbsp;END<br /><span style="color: #008080; ">137</span>&nbsp;<br /><span style="color: #008080; ">138</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">139</span>&nbsp;;&nbsp;&nbsp;&nbsp;GetData&nbsp;Method.&nbsp;Data&nbsp;from&nbsp;passed&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range&nbsp;parameter<br /><span style="color: #008080; ">140</span>&nbsp;;<br /><span style="color: #008080; ">141</span>&nbsp;;&nbsp;&nbsp;&nbsp;@param&nbsp;inputRange&nbsp;{<span style="color: #0000FF; ">in</span>}{required}{scalar&nbsp;or&nbsp;2&nbsp;element&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;array&nbsp;-&nbsp;1&nbsp;and<br /><span style="color: #008080; ">142</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2D&nbsp;ranges&nbsp;supported}&nbsp;input<br /><span style="color: #008080; ">143</span>&nbsp;;<br /><span style="color: #008080; ">144</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Example:<br /><span style="color: #008080; ">145</span>&nbsp;;<br /><span style="color: #008080; ">146</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oExcel&nbsp;=&nbsp;Obj_New("ITCffExcel",&nbsp;"myData.xls")<br /><span style="color: #008080; ">147</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myData=&nbsp;oExcel-&gt;GetData("A1:A100"&nbsp;|&nbsp;["P1:P100","S1:S100"])<br /><span style="color: #008080; ">148</span>&nbsp;;-<br /><span style="color: #008080; ">149</span>&nbsp;FUNCTION&nbsp;ITCffExcel::GetRangeData,&nbsp;inputRange<br /><span style="color: #008080; ">150</span>&nbsp;<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On_Error,&nbsp;2<br /><span style="color: #008080; ">154</span>&nbsp;<br /><span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Obj_Valid(self.oCellRange))&nbsp;THEN&nbsp;Obj_Destroy,&nbsp;self.oCellRange<br /><span style="color: #008080; ">156</span>&nbsp;<br /><span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Size(inputRange,&nbsp;/Dimensions)&nbsp;EQ&nbsp;2)&nbsp;THEN&nbsp;BEGIN<br /><span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange[0],&nbsp;inputRange[1],&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;BEGIN<br /><span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange,&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDELSE<br /><span style="color: #008080; ">164</span>&nbsp;<br /><span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange-&gt;GetProperty,&nbsp;Value&nbsp;=&nbsp;myValues<br /><span style="color: #008080; ">166</span>&nbsp;<br /><span style="color: #008080; ">167</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Size(myValues,&nbsp;/Type)&nbsp;EQ&nbsp;0)&nbsp;THEN&nbsp;BEGIN&nbsp;;&nbsp;undefined<br /><span style="color: #008080; ">168</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message,&nbsp;'Invalid&nbsp;Range&nbsp;'+range+'?&nbsp;Mixed&nbsp;data&nbsp;types&nbsp;not&nbsp;supported.'+&nbsp;$<br /><span style="color: #008080; ">169</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;Data&nbsp;must&nbsp;be&nbsp;numeric&nbsp;and&nbsp;contiguous.',&nbsp;/Ioerror<br /><span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;Return,&nbsp;myValues<br /><span style="color: #008080; ">171</span>&nbsp;END<br /><span style="color: #008080; ">172</span>&nbsp;<br /><span style="color: #008080; ">173</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">174</span>&nbsp;;<br /><span style="color: #008080; ">175</span>&nbsp;;设置单元格数据<br /><span style="color: #008080; ">176</span>&nbsp;;<br /><span style="color: #008080; ">177</span>&nbsp;PRO&nbsp;ITCffExcel::SetRangeData,&nbsp;inputRange,&nbsp;value<br /><span style="color: #008080; ">178</span>&nbsp;<br /><span style="color: #008080; ">179</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On_Error,&nbsp;2<br /><span style="color: #008080; ">182</span>&nbsp;<br /><span style="color: #008080; ">183</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Obj_Valid(self.oCellRange))&nbsp;THEN&nbsp;Obj_Destroy,&nbsp;self.oCellRange<br /><span style="color: #008080; ">184</span>&nbsp;<br /><span style="color: #008080; ">185</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Size(inputRange,&nbsp;/Dimensions)&nbsp;EQ&nbsp;2)&nbsp;THEN&nbsp;BEGIN<br /><span style="color: #008080; ">186</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange[0],&nbsp;inputRange[1],&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">188</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;BEGIN<br /><span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet-&gt;GetProperty,&nbsp;inputRange,&nbsp;Range&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange&nbsp;=&nbsp;oCellRange<br /><span style="color: #008080; ">191</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDELSE<br /><span style="color: #008080; ">192</span>&nbsp;<br /><span style="color: #008080; ">193</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oCellRange-&gt;SetProperty,&nbsp;'select',&nbsp;Value&nbsp;=&nbsp;value<br /><span style="color: #008080; ">194</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">195</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj_Destroy,&nbsp;self.oCellRange<br /><span style="color: #008080; ">196</span>&nbsp;END<br /><span style="color: #008080; ">197</span>&nbsp;<br /><span style="color: #008080; ">198</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">199</span>&nbsp;;&nbsp;&nbsp;&nbsp;Sets&nbsp;Properties&nbsp;on&nbsp;ITCffExcel&nbsp;Object<br /><span style="color: #008080; ">200</span>&nbsp;;<br /><span style="color: #008080; ">201</span>&nbsp;;&nbsp;&nbsp;&nbsp;@Keyword:<br /><span style="color: #008080; ">202</span>&nbsp;;<br /><span style="color: #008080; ">203</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;{<span style="color: #0000FF; ">in</span>}{optional}{scalar&nbsp;<span style="color: #0000FF; ">string</span>}&nbsp;input<br /><span style="color: #008080; ">204</span>&nbsp;;<br /><span style="color: #008080; ">205</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Example:<br /><span style="color: #008080; ">206</span>&nbsp;;<br /><span style="color: #008080; ">207</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oExcel&nbsp;=&nbsp;Obj_New("ITCffExcel",&nbsp;"myData.xls")<br /><span style="color: #008080; ">208</span>&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oExcel-&gt;SetPropery,&nbsp;SHEET="Sheet2"<br /><span style="color: #008080; ">209</span>&nbsp;;-<br /><span style="color: #008080; ">210</span>&nbsp;PRO&nbsp;ITCffExcel::SetProperty,&nbsp;Sheet&nbsp;=&nbsp;sheet,&nbsp;_Extra&nbsp;=&nbsp;extra<br /><span style="color: #008080; ">211</span>&nbsp;<br /><span style="color: #008080; ">212</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">213</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">214</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On_Error,&nbsp;2<br /><span style="color: #008080; ">215</span>&nbsp;<br /><span style="color: #008080; ">216</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Obj_Valid(self.oSheet))&nbsp;THEN&nbsp;Obj_Destroy,&nbsp;self.oSheet<br /><span style="color: #008080; ">217</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">218</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheetCollection-&gt;GetProperty,&nbsp;sheet,&nbsp;Item&nbsp;=&nbsp;oSheet<br /><span style="color: #008080; ">219</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">220</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet&nbsp;=&nbsp;oSheet<br /><span style="color: #008080; ">221</span>&nbsp;END<br /><span style="color: #008080; ">222</span>&nbsp;<br /><span style="color: #008080; ">223</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">224</span>&nbsp;;<br /><span style="color: #008080; ">225</span>&nbsp;;析构<br /><span style="color: #008080; ">226</span>&nbsp;;<br /><span style="color: #008080; ">227</span>&nbsp;PRO&nbsp;ITCffExcel::Cleanup<br /><span style="color: #008080; ">228</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">229</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">230</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">231</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On_Error,&nbsp;2<br /><span style="color: #008080; ">232</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">233</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookData-&gt;SetProperty,&nbsp;Saved&nbsp;=&nbsp;1<br /><span style="color: #008080; ">234</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookCollection-&gt;Close<br /><span style="color: #008080; ">235</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oExcel-&gt;Quit<br /><span style="color: #008080; ">236</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">237</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Obj_Destroy,&nbsp;[self.oSheet,&nbsp;self.oCellRange,&nbsp;self.oSheetCollection,&nbsp;$<br /><span style="color: #008080; ">238</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookData,&nbsp;self.oWkBookCollection,&nbsp;self.oExcel]<br /><span style="color: #008080; ">239</span>&nbsp;END<br /><span style="color: #008080; ">240</span>&nbsp;<br /><span style="color: #008080; ">241</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">242</span>&nbsp;;<br /><span style="color: #008080; ">243</span>&nbsp;;初始化<br /><span style="color: #008080; ">244</span>&nbsp;;<br /><span style="color: #008080; ">245</span>&nbsp;FUNCTION&nbsp;ITCffExcel::Init,&nbsp;fileName,&nbsp;Sheet&nbsp;=&nbsp;sheet<br /><span style="color: #008080; ">246</span>&nbsp;<br /><span style="color: #008080; ">247</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">248</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">249</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On_Error,&nbsp;2<br /><span style="color: #008080; ">250</span>&nbsp;<br /><span style="color: #008080; ">251</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(N_Params()&nbsp;LT&nbsp;1)&nbsp;THEN&nbsp;Message,&nbsp;'ITCffExcel::Init&nbsp;requires&nbsp;file&nbsp;name'<br /><span style="color: #008080; ">252</span>&nbsp;<br /><span style="color: #008080; ">253</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Use&nbsp;the&nbsp;IDL&nbsp;COM&nbsp;import&nbsp;bridge&nbsp;to&nbsp;init&nbsp;Excel&nbsp;Application&nbsp;Object<br /><span style="color: #008080; ">254</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oExcel&nbsp;=&nbsp;Obj_New("IDLcomIDispatch$PROGID$Excel_Application")<br /><span style="color: #008080; ">255</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">256</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;~self.oExcel&nbsp;THEN&nbsp;Return,&nbsp;0<br /><span style="color: #008080; ">257</span>&nbsp;<br /><span style="color: #008080; ">258</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Get&nbsp;a&nbsp;reference&nbsp;to&nbsp;the&nbsp;Excel&nbsp;Workbook&nbsp;Collection&nbsp;Object<br /><span style="color: #008080; ">259</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oExcel-&gt;GetProperty,&nbsp;Workbooks&nbsp;=&nbsp;oWkBookCollection<br /><span style="color: #008080; ">260</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookCollection&nbsp;=&nbsp;oWkBookCollection<br /><span style="color: #008080; ">261</span>&nbsp;<br /><span style="color: #008080; ">262</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileName&nbsp;=&nbsp;fileName<br /><span style="color: #008080; ">263</span>&nbsp;<br /><span style="color: #008080; ">264</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Open&nbsp;the&nbsp;Excel&nbsp;data<br /><span style="color: #008080; ">265</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookData&nbsp;=&nbsp;self.oWkBookCollection-&gt;Open(self.fileName)<br /><span style="color: #008080; ">266</span>&nbsp;<br /><span style="color: #008080; ">267</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Get&nbsp;a&nbsp;reference&nbsp;to&nbsp;the&nbsp;sheets&nbsp;collection<br /><span style="color: #008080; ">268</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oWkBookData-&gt;GetProperty,&nbsp;Sheets&nbsp;=&nbsp;oSheetCollection<br /><span style="color: #008080; ">269</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheetCollection&nbsp;=&nbsp;oSheetCollection<br /><span style="color: #008080; ">270</span>&nbsp;<br /><span style="color: #008080; ">271</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Parmamerized&nbsp;property&nbsp;-&nbsp;props&nbsp;can&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a&nbsp;value<br /><span style="color: #008080; ">272</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;(<span style="color: #0000FF; ">this</span>&nbsp;syntax&nbsp;used&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;collections)&nbsp;-&nbsp;Goofy&nbsp;COM<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br /><span style="color: #008080; ">273</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(Keyword_Set(sheet))&nbsp;THEN&nbsp;BEGIN<br /><span style="color: #008080; ">274</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheetCollection-&gt;GetProperty,&nbsp;sheet,&nbsp;Item&nbsp;=&nbsp;oSheet<br /><span style="color: #008080; ">275</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet&nbsp;=&nbsp;oSheet<br /><span style="color: #008080; ">276</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;ELSE&nbsp;BEGIN<br /><span style="color: #008080; ">277</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheetCollection-&gt;GetProperty,&nbsp;'Sheet1',&nbsp;Item=oSheet<br /><span style="color: #008080; ">278</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.oSheet&nbsp;=&nbsp;oSheet<br /><span style="color: #008080; ">279</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDELSE<br /><span style="color: #008080; ">280</span>&nbsp;<br /><span style="color: #008080; ">281</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return,&nbsp;1<br /><span style="color: #008080; ">282</span>&nbsp;END<br /><span style="color: #008080; ">283</span>&nbsp;<br /><span style="color: #008080; ">284</span>&nbsp;;-----------------------------------------------------------------<br /><span style="color: #008080; ">285</span>&nbsp;;<br /><span style="color: #008080; ">286</span>&nbsp;;定义<br /><span style="color: #008080; ">287</span>&nbsp;;<br /><span style="color: #008080; ">288</span>&nbsp;PRO&nbsp;ITCffExcel__Define<br /><span style="color: #008080; ">289</span>&nbsp;<br /><span style="color: #008080; ">290</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMPILE_OPT&nbsp;IDL2<br /><span style="color: #008080; ">291</span>&nbsp;<br /><span style="color: #008080; ">292</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;=&nbsp;{ITCffExcel&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;$<br /><span style="color: #008080; ">293</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">294</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;参数<br /><span style="color: #008080; ">295</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName&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;$<br /><span style="color: #008080; ">296</span>&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;<br /><span style="color: #008080; ">297</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;对象<br /><span style="color: #008080; ">298</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oExcel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;Obj_New()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;$&nbsp;<br /><span style="color: #008080; ">299</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oWkBookCollection&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;Obj_New()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;$<br /><span style="color: #008080; ">300</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oWkBookData&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;Obj_New()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;$&nbsp;<br /><span style="color: #008080; ">301</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oSheetCollection&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;Obj_New()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;$&nbsp;<br /><span style="color: #008080; ">302</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oSheet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;Obj_New()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;$&nbsp;<br /><span style="color: #008080; ">303</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oCellRange&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;Obj_New()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;&nbsp;<br /><span style="color: #008080; ">304</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">305</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">306</span>&nbsp;END</div><img src ="http://www.cppblog.com/xvsdf100/aggbug/201419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-07-01 12:50 <a href="http://www.cppblog.com/xvsdf100/archive/2013/07/01/201419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IDL接口或许你会遇到一个挺无语的地方------》关键字</title><link>http://www.cppblog.com/xvsdf100/archive/2013/06/25/201301.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Tue, 25 Jun 2013 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/06/25/201301.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/201301.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/06/25/201301.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/201301.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/201301.html</trackback:ping><description><![CDATA[我应该快有一年工作经验，虽然毕业才没有几天。 一点都不伤感，因为没有感觉，一直都在工作。<br />我的工作前段时间主要给写IDL接口（下个月开始投向GIS开发），主要是AUTOCAD的接口，我公司用teigha的库。<br />不得不说代码写的真的漂亮，帮助文档也写的很好。<br /><br />IDL 资料本身就很少，IDL 接口资料就几乎就一本老外的书籍，而且版本比较老了，所以难度还是有一点的。<br />我现在对IDL接口应该是比较熟练，如果你遇到一些问题，可以问我，maybe我是知道的。<br /><br />好了，说一下正题。<br />在IDL中大量使用关键字，所以我们在开发IDL接口当中用到关键字也是非常多的。<br /><br />我就不分析关键字的原理了，因为快要下班了。<br />最新版关键字用法和以前老版本不一样所以需要注意。<br />例子代码在帮助文档有。<br /><br />现在我觉一个例子<br />现在我们定义关键字的IDL_KW_PAR<br />static IDL_KW_PAR kw_pars[] = {<br />{&#8220;BLOCK&#8221;，IDL_TYP_STRING，1,0,(int*)IDL_KW_OFFSETOF(block_there),(char*)IDL_KW_OFFSETOF(Block)},<br />{"INDEX",IDL_TYP_LONG,1,0,(int*)IDL_KW_OFFSETOF(index_there),(char*)&nbsp;IDL_KW_OFFSETOF(index),<br />{NULL}&nbsp;<br />};<br /><br />这里就定义好了 IDL_KW_PAR.<br />注意一个问题，BLOCK 和 INDEX 定义顺序有讲求。<br />你必须要把BLOCK放到INDEX上面。<br />因为B &lt; I 。<br />如果没有按照这样顺序声明你就使用关键字就会出现不能分配关键字。<br />因为这个必须 按照 in LEXICAL order （词法顺序来弄）。<br />你会觉得这个非常好笑，但却是是这样的，这个在idl help 里面是没有说明的。<br />这个是我在分析export.h 发现问题解决方法。<br /><br /><br />我就简单说到这里吧。<br /><br />如果你想知道IDL 怎么在结构体里面传递 IDL_VPTR 或者 怎么返回动态的数据 或者 &nbsp;=== 或者 一些DWG的东西也可以找我哦。<br />其实我想说我擅长网络开发行不呢！！！！！<br />My QQ 群：274301756<br />速度下班，我IT 但我从来不加班。。。<img src ="http://www.cppblog.com/xvsdf100/aggbug/201301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-06-25 17:34 <a href="http://www.cppblog.com/xvsdf100/archive/2013/06/25/201301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>看我怎样模拟3次握手和数据发送（windows）</title><link>http://www.cppblog.com/xvsdf100/archive/2013/06/25/201297.html</link><dc:creator>小鱼儿</dc:creator><author>小鱼儿</author><pubDate>Tue, 25 Jun 2013 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/xvsdf100/archive/2013/06/25/201297.html</guid><wfw:comment>http://www.cppblog.com/xvsdf100/comments/201297.html</wfw:comment><comments>http://www.cppblog.com/xvsdf100/archive/2013/06/25/201297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xvsdf100/comments/commentRss/201297.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xvsdf100/services/trackbacks/201297.html</trackback:ping><description><![CDATA[看过很多网络书籍 和 编程书籍，突然发现自己从来没有实现模拟TCP三次握手。<br />
就连steven也只是用抓包程序说明一下。<br />
我一直觉得实践只检验真理的唯一标准，如是就开始自己试验。<br />
我开始准备用原始套接字来解决这个问题，但是微软已经在xp（含XP）以后就不在支持发送原始TCP。（貌似网上有人反汇编，找到过滤的代码。）<br />
心里一下就被打入谷底了。<br />
不过突然想貌似可以用驱动发送数据包，而且我以前用winpcap写过一个ARP攻击软件，所以发送数据包的问题解决了。<br />
但接踵过来问题又来了，我用winpcap发送数据包，应用层没有对应的程序，所以windows系统会自动发送RST来终结我的链接。<br />
链接都终止我握个屁的手啊。<br />
<br />
瞬间心碎了，但哥没有放弃。又想起哥自学过驱动开发，了解过网络驱动拦截，想起了NDIS 中间层数据包过滤。<br />
我直接简单修改那个代码 实现我拦截RST 。 老子拦截了你，你就发吧。<br />
这些准备工作完成了。<br />
<br />
看看我写的核心部分---》3次握手 加上一个消息发送 （测试用的是以前自己写TCP聊天程序，自己可以写一个TCP聊天程序，不想写的话就用www.baidu.com来练习也可以）。<br />
自己装B的用C++ 类封装一下协议。<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"stdafx.h"<br />
<span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;HAVE_REMOTE<br />
<span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#pragma&nbsp;comment(lib,"wpcap.lib")<br />
<span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#pragma&nbsp;comment(lib,"ws2_32.lib")<br />
<span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;&lt;pcap.h&gt;<br />
<span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"PacketType.h"<br />
<span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"TCPProtocol.h"<br />
<span style="color: #008080; ">&nbsp;10</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;11</span>&nbsp;USHORT&nbsp;checksum(USHORT&nbsp;*buffer,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size)&nbsp;<br />
<span style="color: #008080; ">&nbsp;12</span>&nbsp;{&nbsp;<br />
<span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;cksum=0;&nbsp;<br />
<span style="color: #008080; ">&nbsp;14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(size&nbsp;&gt;1)&nbsp;<br />
<span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />
<span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cksum+=*buffer++;&nbsp;<br />
<span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;-=<span style="color: #0000FF; ">sizeof</span>(USHORT);&nbsp;<br />
<span style="color: #008080; ">&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
<span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(size&nbsp;)&nbsp;<br />
<span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />
<span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cksum&nbsp;+=&nbsp;*(UCHAR*)buffer;&nbsp;<br />
<span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
<span style="color: #008080; ">&nbsp;23</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cksum&nbsp;=&nbsp;(cksum&nbsp;&gt;&gt;&nbsp;16)&nbsp;+&nbsp;(cksum&nbsp;&amp;&nbsp;0xffff);&nbsp;<br />
<span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cksum&nbsp;+=&nbsp;(cksum&nbsp;&gt;&gt;16);&nbsp;<br />
<span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(USHORT)(~cksum);&nbsp;<br />
<span style="color: #008080; ">&nbsp;27</span>&nbsp;}&nbsp;<br />
<span style="color: #008080; ">&nbsp;28</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_tmain(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[])<br />
<span style="color: #008080; ">&nbsp;30</span>&nbsp;{<br />
<span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcap_if_t&nbsp;*alldevs;<br />
<span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcap_if_t&nbsp;*d;<br />
<span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i=0;<br />
<span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;errbuf[PCAP_ERRBUF_SIZE];<br />
<span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;szSendBuf[60]={0};&nbsp;<br />
<span style="color: #008080; ">&nbsp;36</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u_long&nbsp;Ser;<br />
<span style="color: #008080; ">&nbsp;38</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;获取本地机器设备列表&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,&nbsp;NULL&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;auth&nbsp;is&nbsp;not&nbsp;needed&nbsp;</span><span style="color: #008000; ">*/</span>,&nbsp;&amp;alldevs,&nbsp;<br />
<span style="color: #008080; ">&nbsp;41</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errbuf)&nbsp;==&nbsp;-1)<br />
<span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"Error&nbsp;in&nbsp;pcap_findalldevs_ex:&nbsp;%s\n",&nbsp;errbuf);<br />
<span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br />
<span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;47</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;打印列表&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(d=&nbsp;alldevs;&nbsp;d&nbsp;!=&nbsp;NULL;&nbsp;d=&nbsp;d-&gt;next)<br />
<span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d.&nbsp;%s",&nbsp;++i,&nbsp;d-&gt;name);<br />
<span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(d-&gt;description)<br />
<span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;(%s)\n",&nbsp;d-&gt;description);<br />
<span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />
<span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;(No&nbsp;description&nbsp;available)\n");<br />
<span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;57</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(i&nbsp;==&nbsp;0)<br />
<span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\nNo&nbsp;interfaces&nbsp;found!&nbsp;Make&nbsp;sure&nbsp;WinPcap&nbsp;is&nbsp;installed.\n");<br />
<span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;63</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;64</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcap_t&nbsp;*fp;<br />
<span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcap_if_t&nbsp;*NIC&nbsp;=&nbsp;alldevs;<br />
<span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("----------------------");<br />
<span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(NIC-&gt;name);<br />
<span style="color: #008080; ">&nbsp;69</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;(fp=&nbsp;pcap_open(NIC-&gt;name,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设备名</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;65536,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;要捕获的部分&nbsp;(只捕获前100个字节)</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCAP_OPENFLAG_PROMISCUOUS,&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;混杂模式</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;读超时时间</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;远程机器验证</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errbuf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;错误缓冲</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;)&nbsp;==&nbsp;NULL)<br />
<span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"\nUnable&nbsp;to&nbsp;open&nbsp;the&nbsp;adapter.&nbsp;%s&nbsp;is&nbsp;not&nbsp;supported&nbsp;by&nbsp;WinPcap\n",NIC-&gt;name);<br />
<span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />
<span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">&nbsp;82</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">开始构建数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;BYTE*&nbsp;Packet&nbsp;=&nbsp;NULL;<br />
<span style="color: #008080; ">&nbsp;85</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;86</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;Data[65535];<br />
<span style="color: #008080; ">&nbsp;88</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;buf[1024]&nbsp;=&nbsp;{0};<br />
<span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(buf,"192.168.1.%d",i);<br />
<span style="color: #008080; ">&nbsp;91</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;92</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTCPProtocol&nbsp;tcpData;<br />
<span style="color: #008080; ">&nbsp;94</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置以太网数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;SrcMac[6]&nbsp;=&nbsp;{0x00,0x26,0x82,0xAC,0x81,0x06};<br />
<span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">BYTE&nbsp;SrcMac[6]&nbsp;=&nbsp;{0xc8,0x0a,0xa9,0xc5,0x8e,0xa0};<br />
</span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">BYTE&nbsp;DesMac[6]&nbsp;=&nbsp;{0xbc,0xd1,0x77,0x85,0xea,0x44};</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;DesMac[6]&nbsp;=&nbsp;{0x70,0xf1,0xa1,0xa1,0xe6,0x26};<br />
<span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">BYTE&nbsp;DesMac[6]&nbsp;=&nbsp;{0x0,0x21,0x27,0x8b,0x01,0x20};</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::SetMac(SrcMac,DesMac);<br />
<span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::SetProtocol(0x800);<br />
<span style="color: #008080; ">103</span>&nbsp;<br />
<span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置IP数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetHlen(<span style="color: #0000FF; ">sizeof</span>(IPHEADER));<br />
<span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetVer(4);<br />
<span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetIPTolLen(<span style="color: #0000FF; ">sizeof</span>(IPHEADER)+<span style="color: #0000FF; ">sizeof</span>(TCPHEADER));<br />
<span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetID(256);<br />
<span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetFlagAndFrag(0,0);<br />
<span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetTTl(64);<br />
<span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetProtocol(6);<br />
<span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetIP("192.168.12.2","192.168.12.1");&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">220.181.163.22<br />
</span><span style="color: #008080; ">113</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置TCP&nbsp;数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetPort(6654,6666);<br />
<span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetSerial(256);<br />
<span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetACKSerial(0);<br />
<span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetTCPHeardLen(<span style="color: #0000FF; ">sizeof</span>(TCPHEADER));<br />
<span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetFlag(2);<br />
<span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetWindowSize(16384);<br />
<span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetURP(0);<br />
<span style="color: #008080; ">122</span>&nbsp;<br />
<span style="color: #008080; ">123</span>&nbsp;<br />
<span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">现在构建数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">125</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.MakePacket();<br />
<span style="color: #008080; ">126</span>&nbsp;<br />
<span style="color: #008080; ">127</span>&nbsp;<br />
<span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.GetPacket(Data,65535);<br />
<span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nLen&nbsp;=&nbsp;tcpData.GetTotalSize();<br />
<span style="color: #008080; ">130</span>&nbsp;<br />
<span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">构建ip&nbsp;数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">132</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetData(Data,nLen);<br />
<span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::MakePacket();<br />
<span style="color: #008080; ">134</span>&nbsp;<br />
<span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::GetPacket(Data,65535);<br />
<span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData.CIPProtocol::GetTotalSize();<br />
<span style="color: #008080; ">137</span>&nbsp;<br />
<span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">构建以太网数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">139</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::SetData(Data,nLen);<br />
<span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::MakePacket();<br />
<span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::GetPacket(Data,65535);<br />
<span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData.CBaseNetProtol::GetPacketSize();<br />
<span style="color: #008080; ">143</span>&nbsp;<br />
<span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">发送握手数据包1.</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">145</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;发送数据包&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pcap_sendpacket(fp,&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;UCHAR*)Data,nLen&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;size&nbsp;</span><span style="color: #008000; ">*/</span>)&nbsp;!=&nbsp;0)<br />
<span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"\nError&nbsp;sending&nbsp;the&nbsp;packet:&nbsp;\n",&nbsp;pcap_geterr(fp));<br />
<span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />
<span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">152</span>&nbsp;<br />
<span style="color: #008080; ">153</span>&nbsp;<br />
<span style="color: #008080; ">154</span>&nbsp;<br />
<span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::SetMac(SrcMac,DesMac);<br />
<span style="color: #008080; ">156</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::SetProtocol(0x800);<br />
<span style="color: #008080; ">157</span>&nbsp;<br />
<span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置IP数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">159</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetHlen(<span style="color: #0000FF; ">sizeof</span>(IPHEADER));<br />
<span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetVer(4);<br />
<span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetIPTolLen(<span style="color: #0000FF; ">sizeof</span>(IPHEADER)+<span style="color: #0000FF; ">sizeof</span>(TCPHEADER));<br />
<span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetID(256);<br />
<span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetFlagAndFrag(0,0);<br />
<span style="color: #008080; ">164</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetTTl(64);<br />
<span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetProtocol(6);<br />
<span style="color: #008080; ">166</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetIP("192.168.12.2","192.168.12.1");&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">220.181.163.22<br />
</span><span style="color: #008080; ">167</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">168</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置TCP&nbsp;数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">169</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetPort(6654,6666);<br />
<span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetSerial(256);<br />
<span style="color: #008080; ">171</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetACKSerial(0);<br />
<span style="color: #008080; ">172</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetTCPHeardLen(<span style="color: #0000FF; ">sizeof</span>(TCPHEADER));<br />
<span style="color: #008080; ">173</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetFlag(2);<br />
<span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetWindowSize(16384);<br />
<span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetURP(0);<br />
<span style="color: #008080; ">176</span>&nbsp;<br />
<span style="color: #008080; ">177</span>&nbsp;<br />
<span style="color: #008080; ">178</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">通过捕获数据包得到对方发过来的数据包，然后再添加数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">179</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;pcap_pkthdr&nbsp;*header;<br />
<span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;u_char&nbsp;*pkt_data;<br />
<span style="color: #008080; ">182</span>&nbsp;<br />
<span style="color: #008080; ">183</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">184</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(res&nbsp;=&nbsp;pcap_next_ex(&nbsp;fp,&nbsp;&amp;header,&nbsp;&amp;pkt_data))<br />
<span style="color: #008080; ">185</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">186</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPHEADER&nbsp;*ip&nbsp;=&nbsp;(IPHEADER*)(pkt_data&nbsp;+&nbsp;14);<br />
<span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in_addr&nbsp;addr;<br />
<span style="color: #008080; ">188</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addr.S_un.S_addr&nbsp;=&nbsp;ip-&gt;destIP;<br />
<span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCPHEADER*&nbsp;tcp&nbsp;=&nbsp;(TCPHEADER*)(pkt_data&nbsp;+&nbsp;14&nbsp;+&nbsp;20);<br />
<span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(strcmp("192.168.12.2",inet_ntoa(addr))&nbsp;==&nbsp;0)<br />
<span style="color: #008080; ">191</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">192</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("--------------------------------------------");<br />
<span style="color: #008080; ">193</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n",inet_ntoa(addr));<br />
<span style="color: #008080; ">194</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("端口:%d~~~~~~~~%d\n",ntohs(tcp-&gt;th_dport),ntohs(tcp-&gt;th_sport));<br />
<span style="color: #008080; ">195</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("序号:%u&nbsp;ACK:%u",ntohl(tcp-&gt;th_seq),ntohl(tcp-&gt;th_ack));<br />
<span style="color: #008080; ">196</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("--------------------------------------------");<br />
<span style="color: #008080; ">197</span>&nbsp;<br />
<span style="color: #008080; ">198</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">getchar();</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">199</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">200</span>&nbsp;<br />
<span style="color: #008080; ">201</span>&nbsp;<br />
<span style="color: #008080; ">202</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ser&nbsp;=&nbsp;ntohl(tcp-&gt;th_seq)&nbsp;+&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">进行第二次握手</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">203</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetFlag(0x10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">重新设置</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">204</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetSerial(257);&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 style="color: #008000; ">//</span><span style="color: #008000; ">IP的ID&nbsp;不进行设置没有影响，据我的测试。</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">205</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.SetACKSerial(Ser);<br />
<span style="color: #008080; ">206</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetID(257);<br />
<span style="color: #008080; ">207</span>&nbsp;<br />
<span style="color: #008080; ">208</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />
<span style="color: #008080; ">209</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">210</span>&nbsp;<br />
<span style="color: #008080; ">211</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">212</span>&nbsp;<br />
<span style="color: #008080; ">213</span>&nbsp;<br />
<span style="color: #008080; ">214</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">现在构建数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">215</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.MakePacket();<br />
<span style="color: #008080; ">216</span>&nbsp;<br />
<span style="color: #008080; ">217</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.GetPacket(Data,65535);<br />
<span style="color: #008080; ">218</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData.GetTotalSize();<br />
<span style="color: #008080; ">219</span>&nbsp;<br />
<span style="color: #008080; ">220</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">构建ip&nbsp;数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">221</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetData(Data,nLen);<br />
<span style="color: #008080; ">222</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::MakePacket();<br />
<span style="color: #008080; ">223</span>&nbsp;<br />
<span style="color: #008080; ">224</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::GetPacket(Data,65535);<br />
<span style="color: #008080; ">225</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData.CIPProtocol::GetTotalSize();<br />
<span style="color: #008080; ">226</span>&nbsp;<br />
<span style="color: #008080; ">227</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">构建以太网数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">228</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::SetData(Data,nLen);<br />
<span style="color: #008080; ">229</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::MakePacket();<br />
<span style="color: #008080; ">230</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CBaseNetProtol::GetPacket(Data,65535);<br />
<span style="color: #008080; ">231</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData.CBaseNetProtol::GetPacketSize();<br />
<span style="color: #008080; ">232</span>&nbsp;<br />
<span style="color: #008080; ">233</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">发送握手数据包1.</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">234</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;发送数据包&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">235</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pcap_sendpacket(fp,&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;UCHAR*)Data,nLen&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;size&nbsp;</span><span style="color: #008000; ">*/</span>)&nbsp;!=&nbsp;0)<br />
<span style="color: #008080; ">236</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">237</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"\nError&nbsp;sending&nbsp;the&nbsp;packet:&nbsp;\n",&nbsp;pcap_geterr(fp));<br />
<span style="color: #008080; ">238</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />
<span style="color: #008080; ">239</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">240</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">241</span>&nbsp;<br />
<span style="color: #008080; ">242</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">////////////////////////////////////////////////////////////////////////</span><span style="color: #008000; ">//</span><span style="color: #808080; "><br />
</span><span style="color: #008080; ">243</span>&nbsp;<span style="color: #808080; "></span><br />
<span style="color: #008080; ">244</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">开始发送TCP&nbsp;数据。</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">245</span>&nbsp;<span style="color: #008000; "></span><br />
<span style="color: #008080; ">246</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTCPProtocol&nbsp;tcpData1;<br />
<span style="color: #008080; ">247</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CBaseNetProtol::SetMac(SrcMac,DesMac);<br />
<span style="color: #008080; ">248</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CBaseNetProtol::SetProtocol(0x800);<br />
<span style="color: #008080; ">249</span>&nbsp;<br />
<span style="color: #008080; ">250</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设置IP数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">251</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetHlen(<span style="color: #0000FF; ">sizeof</span>(IPHEADER));<br />
<span style="color: #008080; ">252</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetVer(4);<br />
<span style="color: #008080; ">253</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetIPTolLen(<span style="color: #0000FF; ">sizeof</span>(IPHEADER)+<span style="color: #0000FF; ">sizeof</span>(TCPHEADER)+8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">增加数据的长度</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">254</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetFlagAndFrag(0,0);<br />
<span style="color: #008080; ">255</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetTTl(64);<br />
<span style="color: #008080; ">256</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetProtocol(6);<br />
<span style="color: #008080; ">257</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetIP("192.168.12.2","192.168.12.1");&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">220.181.163.22<br />
</span><span style="color: #008080; ">258</span>&nbsp;<span style="color: #008000; "><br />
</span><span style="color: #008080; ">259</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">设置TCP&nbsp;数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">260</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetPort(6654,6666);<br />
<span style="color: #008080; ">261</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetTCPHeardLen(<span style="color: #0000FF; ">sizeof</span>(TCPHEADER));<br />
<span style="color: #008080; ">262</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetWindowSize(16384);<br />
<span style="color: #008080; ">263</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetURP(0);<br />
<span style="color: #008080; ">264</span>&nbsp;<br />
<span style="color: #008080; ">265</span>&nbsp;<br />
<span style="color: #008080; ">266</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData.CIPProtocol::SetID(257);<br />
<span style="color: #008080; ">267</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetSerial(257);&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 style="color: #008000; ">//</span><span style="color: #008000; ">IP的ID&nbsp;不进行设置没有影响，据我的测试。</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">268</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetACKSerial(Ser);<br />
<span style="color: #008080; ">269</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetFlag(0x18);<br />
<span style="color: #008080; ">270</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;hello[]&nbsp;=&nbsp;"aaaaaaaa";<br />
<span style="color: #008080; ">271</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.SetData((BYTE*)hello,strlen(hello));<br />
<span style="color: #008080; ">272</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.MakePacket();<br />
<span style="color: #008080; ">273</span>&nbsp;<br />
<span style="color: #008080; ">274</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.GetPacket(Data,65535);<br />
<span style="color: #008080; ">275</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData1.GetTotalSize();<br />
<span style="color: #008080; ">276</span>&nbsp;<br />
<span style="color: #008080; ">277</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">构建ip&nbsp;数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">278</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::SetData(Data,nLen);<br />
<span style="color: #008080; ">279</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::MakePacket();<br />
<span style="color: #008080; ">280</span>&nbsp;<br />
<span style="color: #008080; ">281</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CIPProtocol::GetPacket(Data,65535);<br />
<span style="color: #008080; ">282</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData1.CIPProtocol::GetTotalSize();<br />
<span style="color: #008080; ">283</span>&nbsp;<br />
<span style="color: #008080; ">284</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">构建以太网数据包</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">285</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CBaseNetProtol::SetData(Data,nLen);<br />
<span style="color: #008080; ">286</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CBaseNetProtol::MakePacket();<br />
<span style="color: #008080; ">287</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpData1.CBaseNetProtol::GetPacket(Data,65535);<br />
<span style="color: #008080; ">288</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nLen&nbsp;=&nbsp;tcpData1.CBaseNetProtol::GetPacketSize();<br />
<span style="color: #008080; ">289</span>&nbsp;<br />
<span style="color: #008080; ">290</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;发送数据包&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">291</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pcap_sendpacket(fp,&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;UCHAR*)Data,nLen&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;size&nbsp;</span><span style="color: #008000; ">*/</span>)&nbsp;!=&nbsp;0)<br />
<span style="color: #008080; ">292</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<span style="color: #008080; ">293</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,"\nError&nbsp;sending&nbsp;the&nbsp;packet:&nbsp;\n",&nbsp;pcap_geterr(fp));<br />
<span style="color: #008080; ">294</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />
<span style="color: #008080; ">295</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">296</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">297</span>&nbsp;<br />
<span style="color: #008080; ">298</span>&nbsp;<br />
<span style="color: #008080; ">299</span>&nbsp;<br />
<span style="color: #008080; ">300</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;不再需要设备列表了，释放它&nbsp;</span><span style="color: #008000; ">*/</span><br />
<span style="color: #008080; ">301</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("发送完毕");<br />
<span style="color: #008080; ">302</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br />
<span style="color: #008080; ">303</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pcap_freealldevs(alldevs);<br />
<span style="color: #008080; ">304</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
<span style="color: #008080; ">305</span>&nbsp;}<br />
<span style="color: #008080; ">306</span>&nbsp;</div>
如果你有虚拟网卡，你还是关掉，因为我默认调用第一张网卡，不然就会出现问题。
我本来只是为了测试而已，代码就随便了写了。
本想写一个带界面发送数据包的程序，发现没有那么多精力做这个事情，不像以前在学校了。<br />
代码工程：<a href="/Files/xvsdf100/Sygate.zip">/Files/xvsdf100/Sygate.zip</a><a href="/Files/xvsdf100/InStall.zip"><br />
<font color="#000000">驱动：</font>&nbsp;</a><a href="/Files/xvsdf100/InStall.zip">
<div style="display: inline !important; ">/Files/xvsdf100/InStall.zip</div>
</a><img src ="http://www.cppblog.com/xvsdf100/aggbug/201297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xvsdf100/" target="_blank">小鱼儿</a> 2013-06-25 17:11 <a href="http://www.cppblog.com/xvsdf100/archive/2013/06/25/201297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>