﻿<?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#</title><link>http://www.cppblog.com/aaxron/category/17910.html</link><description>记录修行的印记
</description><language>zh-cn</language><lastBuildDate>Wed, 26 Jun 2019 10:57:07 GMT</lastBuildDate><pubDate>Wed, 26 Jun 2019 10:57:07 GMT</pubDate><ttl>60</ttl><item><title>c#条件编译</title><link>http://www.cppblog.com/aaxron/archive/2019/06/26/216462.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 26 Jun 2019 10:03:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2019/06/26/216462.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/216462.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2019/06/26/216462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/216462.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/216462.html</trackback:ping><description><![CDATA[<div>&nbsp;Conditional compilation symbols</div><div></div><div>编译器命令行选项（例如，/define:DEBUG）,</div><div>&nbsp; &nbsp; 可以在VS2008的IDE进行设置, Project Property---&gt;Build---&gt;Conditional compilation symbols(如果多个科研使用逗号隔开)</div><div>&nbsp; &nbsp; 系统默认设置了:DEBUG 和 TRACE</div><div></div><div>操作系统外壳程序中的环境变量（例如，set DEBUG=1）。</div><div></div><div>源代码中的杂注（例如，用于定义编译变量的 #define DEBUG，以及用于取消定义它的 #undef DEBUG）。</div><div>&nbsp; &nbsp; &nbsp;必须在file的最前方设置,#define debug或者组合操作</div><div>&nbsp; &nbsp; #if (Debug &amp;&amp; Trace)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; #define DebugAndTrace&nbsp;</div><div>&nbsp; &nbsp; #endif</div><div></div><div>ps:Conditional位于using System.Diagnostics;</div><div></div><div>什么情况下使用该标识符?</div><div></div><div>当程序中一个方法或属性不想再使用时,如果把它删掉就需要把引用的地方一个一个全部删掉不然就会编译错误,这时我们就可以在塔的上面加一个[Conditional("string")] 然后程序运行时就会忽略它</div><div></div><div>ps:[Conditional("string")]里面字符串随意取&nbsp;&nbsp;</div><div></div><div>如果想再次调用那个方法或属性怎么办?</div><div></div><div>这个很简单,你只需在引用命名空间那个地方进行一个宏定义把你在[Conditional("string")]里面的字符串定义出来就能用了</div><div></div><div></div><div>C#-#define条件编译</div><div>C#的预处理器指令从来不会转化为可执行代码的命令，但是会影响编译过程的各个方面，常用的预处理器指令有#define、#undef、#if,#elif,#else和#endif等等，下面介绍C#中使用#define进行条件编译的实例。</div><div>C#中条件编译指令用于按条件包含或排除源文件中的某些部分。在Visual Studio中，会看到被排除的代码显示为灰色。</div><div></div><div>一、#define可以用来做什么</div><div></div><div>1、当计划发布两个版本的代码的时候。即基本版和拥有更多版本的企业版，就可以用到条件编译指令；</div><div>2、例如同一个文件给silverlight、wpf、winform等使用，并且还考虑Debug和Release等，有大部分代码是一样的；</div><div>3、指定函数和属性是否编译到最终产品中去。</div><div></div><div>二、#define用法</div><div></div><div>语法：#define 名称</div><div></div><div>注意：这里名称取Debug，你也可以取其他名称如Dragon</div><div></div><div>1 #define Debug</div><div>说明：</div><div></div><div>1、Debug可以看做是声明的一个变量，但此变量没有真正的值，存在时#if Debug结果为true，否则为false；</div><div></div><div>2、#define单独用没什么意义，一般是和#if或者Conditional特性结合使用；</div><div></div><div>3、#define必须定义在所有using命名空间前面；</div><div></div><div>4、Debug与DEBUG是不同的，C#区分大小写</div><div></div><div>&nbsp;</div><img src ="http://www.cppblog.com/aaxron/aggbug/216462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2019-06-26 18:03 <a href="http://www.cppblog.com/aaxron/archive/2019/06/26/216462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# invoke,BeginInvoke,EndInvoke</title><link>http://www.cppblog.com/aaxron/archive/2016/09/08/214261.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 08 Sep 2016 02:16:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/09/08/214261.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214261.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/09/08/214261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214261.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214261.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">C#&nbsp;invoke,BeginInvoke,EndInvoke<br />在多线程编程中，我们经常要在工作线程中去更新界面显示，而在多线程中直接调用界面控件的方法是错误的做法，Invoke&nbsp;和&nbsp;BeginInvoke&nbsp;就是为了解决这个问题而出现的，使你在多线程中安全的更新界面显示。<br />正确的做法是将工作线程中涉及更新界面的代码封装为一个方法，通过&nbsp;Invoke&nbsp;或者&nbsp;BeginInvoke&nbsp;去调用，两者的区别就是一个导致工作线程等待，而另外一个则不会。<br />再举个简单例子说明下使用方法,比如你在启动一个线程,在线程的方法中想更新窗体中的一个TextBox..&nbsp;<br /><br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Threading;<br /></span><span style="color: #008000">//</span><span style="color: #008000">启动一个线程&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #000000">Thread&nbsp;thread</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadStart(DoWork));&nbsp;<br />thread.Start();&nbsp;<br /></span><span style="color: #008000">//</span><span style="color: #008000">线程方法&nbsp;</span><span style="color: #008000"><br /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;DoWork()&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.TextBox1.Text</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">我是一个文本框</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />}&nbsp;<br />如果你像上面操作,在VS2005或2008里是会有异常的<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;<br /><br /><br />正确的做法是用Invoke\BeginInvoke<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Threading;<br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;test<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;partial&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Form1&nbsp;:&nbsp;Form<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyInvoke(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;str1,</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;str2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Form1()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;DoWork()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyInvoke&nbsp;mi&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyInvoke(UpdateForm);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.BeginInvoke(mi,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object[]&nbsp;{</span><span style="color: #000000">"</span><span style="color: #000000">我是文本框</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">haha</span><span style="color: #000000">"</span><span style="color: #000000">});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;UpdateForm(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;param1,</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;parm2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.textBox1.Text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;param1</span><span style="color: #000000">+</span><span style="color: #000000">parm2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;button1_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadStart(DoWork));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread.Start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />相关资料：Invoke&nbsp;和&nbsp;BeginInvoke&nbsp;的真正涵义&nbsp;、在多线程中如何调用Winform<br />Control.BeginInvoke&nbsp;方法&nbsp;&nbsp;Visual&nbsp;Studio&nbsp;2010Visual&nbsp;Studio&nbsp;</span><span style="color: #000000">2010</span><span style="color: #000000">&nbsp;<br />在创建控件的基础句柄所在线程上异步执行委托。<br />公共方法&nbsp;BeginInvoke(Delegate)&nbsp;在创建控件的基础句柄所在线程上异步执行指定委托。&nbsp;<br />公共方法&nbsp;BeginInvoke(Delegate,Object[])&nbsp;&nbsp;在创建控件的基础句柄所在线程上，用指定的参数异步执行指定委托。&nbsp;<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;EndInvoke(IAsyncResult&nbsp;asyncResult)<br />参数：asyncResult&nbsp;类型：System.IAsyncResult&nbsp;<br />IAsyncResult，表示特定的调用异步操作，在调用&nbsp;BeginInvoke&nbsp;时返回。&nbsp;<br /></span></div>
<p>&nbsp;</p><img src ="http://www.cppblog.com/aaxron/aggbug/214261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-09-08 10:16 <a href="http://www.cppblog.com/aaxron/archive/2016/09/08/214261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String.Format</title><link>http://www.cppblog.com/aaxron/archive/2016/09/02/214252.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 02 Sep 2016 06:23:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/09/02/214252.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214252.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/09/02/214252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214252.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214252.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>  <p align="left" style="margin-bottom: 3.75pt;"><span style="font-size: 7.5pt; font-family: 宋体;">每个格式项都采用下面的形式并包含以下组件：</span></p>  <p align="left" style="margin: 7.5pt 0cm 3.75pt;"><strong><span style="font-size: 7.5pt; font-family: Cambria, serif;">{</span></strong><span style="font-size: 7.5pt; font-family: 宋体;">索引</span><span style="font-size: 7.5pt; font-family: Cambria, serif;">[<strong>,</strong></span><span style="font-size: 7.5pt; font-family: 宋体;">对齐</span><span style="font-size: 7.5pt; font-family: Cambria, serif;">][<strong>:</strong></span><span style="font-size: 7.5pt; font-family: 宋体;">格式字符串</span><span style="font-size: 7.5pt; font-family: Cambria, serif;">]<strong>}</strong></span></p>  <p align="left" style="margin: 7.5pt 0cm 3.75pt;"><span style="font-size: 7.5pt; font-family: 宋体;">必须使用成对的大括号（</span><span style="font-size: 7.5pt; font-family: Cambria, serif;">&#8220;{&#8221;</span><span style="font-size: 7.5pt; font-family: 宋体;">和</span><span style="font-size: 7.5pt; font-family: Cambria, serif;">&#8220;}&#8221;</span><span style="font-size: 7.5pt; font-family: 宋体;">）。</span></p>  <p align="left" style="margin-bottom: 3pt;"><strong><span style="font-size: 7.5pt; font-family: 宋体;">转义大括号</span></strong><strong></strong></p>  <p align="left" style="margin: 7.5pt 0cm 3.75pt;"><span style="font-size: 7.5pt; font-family: 宋体;">左大括号和右大括号被解释为格式项的开始和结束。因此，必须使用转义序列显示文本左大括号或右大括号。在固定文本中指定两个左大括号</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"> ("{{") </span><span style="font-size: 7.5pt; font-family: 宋体;">以显示一个左大括号</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"> ("{")</span><span style="font-size: 7.5pt; font-family: 宋体;">，或指定两个右大括号</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"> ("}}") </span><span style="font-size: 7.5pt; font-family: 宋体;">以显示一个右大括号</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"> ("}")</span><span style="font-size: 7.5pt; font-family: 宋体;">。按照在格式项中遇到大括号的顺序依次解释它们。不支持解释嵌套的大括号。</span></p>  <p>&nbsp;</p>  <p style="margin-top:7.5pt;margin-right:0cm;margin-bottom:3.75pt; margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">下表描述了每个标准格式说明符的标准格式模式，以及可通过设置来修改标准格式的关联</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"> NumberFormatInfo </span><span style="font-size: 7.5pt; font-family: 宋体;">属性。</span></p>  <p style="margin-top:7.5pt;margin-right:0cm;margin-bottom:3.75pt; margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_mscorlib/html/b42c00a5-84e5-51a1-b7e4-6aaae8dac25b.htm</span></p>  <p style="margin-top:7.5pt;margin-right:0cm;margin-bottom:3.75pt; margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_fxfund/html/580e57eb-ac47-4ffd-bccd-3a1637c2f467.htm</span></p>  <table border="0" cellpadding="0" width="39%" style="width:39.52%;" frame="lhs">  <tbody><tr style="height:13.65pt">   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #c8cdde; border-bottom-width: 1pt; padding: 3.75pt; height: 13.65pt; background: #efeff7;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><strong><span style="font-size:7.5pt;font-family:宋体;color:#000066">格式模式</span></strong><strong></strong></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #c8cdde; border-bottom-width: 1pt; padding: 3.75pt; height: 13.65pt; background: #efeff7;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><strong><span style="font-size:7.5pt;font-family:宋体;color:#000066">说明和关联属性</span></strong><strong> </strong><strong></strong></p>   </td>  </tr>  <tr style="height:12.7pt">   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; height: 12.7pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">c</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">C </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; height: 12.7pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">货币格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">d</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">D </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">十进制格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">e</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">E </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">科学计数（指数）格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">f</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">F </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">固定点格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">g</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">G </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">常规格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">n</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">N </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">数字格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">p</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">P</span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">百分比格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">r</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">R </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">往返格式</span></p>   </td>  </tr>  <tr>   <td width="31%" valign="top" style="width: 31.26%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">x</span><span style="font-size: 7.5pt; font-family: 宋体;">、</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">X </span></p>   </td>   <td width="66%" valign="top" style="width: 66.08%; border-style: none none solid; border-bottom-color: #d5d5d3; border-bottom-width: 1pt; padding: 3.75pt; background: #f7f7ff;">   <p style="margin-top:.75pt;margin-right:0cm;margin-bottom:   3.0pt;margin-left:0cm"><span style="font-size: 7.5pt; font-family: 宋体;">十六进制格式</span></p>   </td>  </tr> </tbody></table>  <p>&nbsp;</p><img src ="http://www.cppblog.com/aaxron/aggbug/214252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-09-02 14:23 <a href="http://www.cppblog.com/aaxron/archive/2016/09/02/214252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#基础知识加强，值类型，应用类型</title><link>http://www.cppblog.com/aaxron/archive/2016/09/02/214251.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 02 Sep 2016 01:18:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/09/02/214251.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214251.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/09/02/214251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214251.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214251.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: #0000FF; ">using</span>&nbsp;System;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Collections.Generic;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Linq;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Text;<br /><span style="color: #0000FF; ">using</span>&nbsp;TK;<br /><span style="color: #0000FF; ">namespace</span>&nbsp;ConsoleTester<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;SomeRef<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Int32&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;SomeVal<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Int32&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;r1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SomeRef();&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">堆上分配</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;v1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SomeVal();&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">栈上分配，同时确保值类型字段初始化为0.</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1.x&nbsp;=&nbsp;5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1.x&nbsp;=&nbsp;6;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SomeRef&nbsp;r2&nbsp;=&nbsp;r1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2.x&nbsp;=&nbsp;7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("r1.x={0}",&nbsp;r1.x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("r2.x={0}",&nbsp;r2.x);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;v2&nbsp;=&nbsp;v1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v2.x&nbsp;=&nbsp;8;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("v1.x={0}",&nbsp;v1.x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("v2.x={0}",&nbsp;v2.x);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/214251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-09-02 09:18 <a href="http://www.cppblog.com/aaxron/archive/2016/09/02/214251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ CLI 可变参数</title><link>http://www.cppblog.com/aaxron/archive/2016/09/01/214249.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 01 Sep 2016 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/09/01/214249.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214249.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/09/01/214249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214249.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214249.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: #0000FF; ">namespace</span>&nbsp;TK&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">enum</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;LogLevel&nbsp;{&nbsp;Kernel,&nbsp;Fatal,&nbsp;Error,&nbsp;Warning,&nbsp;Infomation,&nbsp;Debug};<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">ref</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;LogHelper<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;Open(String^&nbsp;filename);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;Write(LogLevel&nbsp;level,String^&nbsp;format,<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;array&lt;Object^&gt;^&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;WriteLine(LogLevel&nbsp;level,String^&nbsp;format,<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;array&lt;Object^&gt;^&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;SetLevel(LogLevel&nbsp;level);<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br />}<br /><br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;MarshalString(String^&nbsp;net,&nbsp;CString&amp;&nbsp;os)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;LPCTSTR&nbsp;chars&nbsp;=&nbsp;(LPCTSTR)(Marshal::StringToHGlobalUni(net)).ToPointer();<br />&nbsp;&nbsp;&nbsp;&nbsp;os&nbsp;=&nbsp;chars;<br />&nbsp;&nbsp;&nbsp;&nbsp;Marshal::FreeHGlobal(IntPtr((<span style="color: #0000FF; ">void</span>*)chars));<br />}<br />#pragma&nbsp;unmanaged<br /><span style="color: #0000FF; ">static</span>&nbsp;CStringA&nbsp;CStrW2CStrA(<span style="color: #0000FF; ">const</span>&nbsp;CStringW&nbsp;&amp;cstrSrcW)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len&nbsp;=&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;0,&nbsp;LPCWSTR(cstrSrcW),&nbsp;-1,&nbsp;NULL,&nbsp;0,&nbsp;NULL,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*str&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">char</span>[len];<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(str,&nbsp;0,&nbsp;len);<br />&nbsp;&nbsp;&nbsp;&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;0,&nbsp;LPCWSTR(cstrSrcW),&nbsp;-1,&nbsp;str,&nbsp;len,&nbsp;NULL,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;CStringA&nbsp;cstrDestA&nbsp;=&nbsp;str;<br />&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;str;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cstrDestA;<br />}<br />#pragma&nbsp;managed</div><img src ="http://www.cppblog.com/aaxron/aggbug/214249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-09-01 14:48 <a href="http://www.cppblog.com/aaxron/archive/2016/09/01/214249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dev Express 一些Tips</title><link>http://www.cppblog.com/aaxron/archive/2016/07/21/214020.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 21 Jul 2016 01:54:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/07/21/214020.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/214020.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/07/21/214020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/214020.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/214020.html</trackback:ping><description><![CDATA[<div>
<div style="font-size: 13px; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; width: 98%; border-bottom: #cccccc 1px solid; word-break: break-all; padding-bottom: 4px; padding-top: 4px; padding-left: 4px; border-left: #cccccc 1px solid; padding-right: 5px; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">Dev&nbsp;Express<br /><br />Skin&nbsp;Libraries<br />Skins&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;DevExpress&nbsp;components&nbsp;are&nbsp;shipped&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;compiled&nbsp;libraries.&nbsp;To&nbsp;apply&nbsp;a&nbsp;skin,&nbsp;ensure&nbsp;that&nbsp;a&nbsp;corresponding&nbsp;library&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;added&nbsp;to&nbsp;the&nbsp;References&nbsp;section&nbsp;of&nbsp;your&nbsp;project.<br /><br />Common&nbsp;Skins<br />The&nbsp;DevExpress.Utils.v15.</span><span style="color: #000000">2</span><span style="color: #000000">.dll&nbsp;library&nbsp;contains&nbsp;common&nbsp;skins&nbsp;such&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;the&nbsp;DevExpress&nbsp;Style,&nbsp;Office&nbsp;</span><span style="color: #000000">2013</span><span style="color: #000000">,&nbsp;VS2010,&nbsp;Office&nbsp;</span><span style="color: #000000">2010</span><span style="color: #000000">&nbsp;Blue,&nbsp;etc.&nbsp;This&nbsp;library&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;automatically&nbsp;added&nbsp;to&nbsp;the&nbsp;References&nbsp;section&nbsp;of&nbsp;your&nbsp;project&nbsp;when&nbsp;any&nbsp;DevExpress&nbsp;control</span><span style="color: #000000">/</span><span style="color: #000000">component&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;added&nbsp;to&nbsp;the&nbsp;form.<br /><br />Extra&nbsp;Skins<br />Certain&nbsp;additional&nbsp;skins&nbsp;are&nbsp;available&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;the&nbsp;DevExpress.BonusSkins.v15.</span><span style="color: #000000">2</span><span style="color: #000000">.dll&nbsp;library,&nbsp;which&nbsp;must&nbsp;be&nbsp;manually&nbsp;added&nbsp;to&nbsp;the&nbsp;References&nbsp;section&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;you&nbsp;need&nbsp;to&nbsp;use&nbsp;any&nbsp;of&nbsp;these&nbsp;bonus&nbsp;skins.<br /><br />Custom&nbsp;Skins<br />You&nbsp;can&nbsp;customize&nbsp;any&nbsp;common&nbsp;or&nbsp;extra&nbsp;skin&nbsp;by&nbsp;creating&nbsp;a&nbsp;custom&nbsp;skin&nbsp;</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;the&nbsp;WinForms&nbsp;Skin&nbsp;Editor&nbsp;utility.&nbsp;The&nbsp;WinForms&nbsp;Skin&nbsp;Editor&nbsp;creates&nbsp;a&nbsp;skin&nbsp;library&nbsp;(.dll)&nbsp;containing&nbsp;custom&nbsp;skins.&nbsp;The&nbsp;created&nbsp;library&nbsp;must&nbsp;be&nbsp;manually&nbsp;added&nbsp;to&nbsp;the&nbsp;References&nbsp;section&nbsp;of&nbsp;your&nbsp;project.<br /><br />Note<br />To&nbsp;use&nbsp;any&nbsp;extra&nbsp;or&nbsp;custom&nbsp;skin&nbsp;at&nbsp;runtime,&nbsp;you&nbsp;need&nbsp;to&nbsp;add&nbsp;the&nbsp;skin&nbsp;library&nbsp;registration&nbsp;code.&nbsp;See&nbsp;the&nbsp;Bonus&nbsp;and&nbsp;Custom&nbsp;Skin&nbsp;Registration&nbsp;topic&nbsp;to&nbsp;learn&nbsp;more.<br />[STAThread]<br /></span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Skin&nbsp;registration.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;DevExpress.UserSkins.BonusSkins.Register();<br />&nbsp;&nbsp;&nbsp;&nbsp;Application.Run(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Form1());<br />}<br /><br /><br />使动态皮肤即刻生效<br />It&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;possible&nbsp;to&nbsp;call&nbsp;the&nbsp;EnableFormSkins()&nbsp;method&nbsp;later,&nbsp;after&nbsp;the&nbsp;application&nbsp;startup.&nbsp;In&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;instance,&nbsp;the&nbsp;DevExpress.LookAndFeel.LookAndFeelHelper.ForceDefaultLookAndFeelChanged&nbsp;method&nbsp;needs&nbsp;to&nbsp;be&nbsp;called&nbsp;after&nbsp;the&nbsp;call&nbsp;to&nbsp;EnableFormSkins().&nbsp;This&nbsp;forces&nbsp;the&nbsp;form</span><span style="color: #000000">'</span><span style="color: #000000">s&nbsp;title&nbsp;bar&nbsp;to&nbsp;be&nbsp;repainted.</span><span style="color: #000000"><br /></span><span style="color: #000000">DevExpress.Skins.SkinManager.EnableFormSkins();<br />DevExpress.LookAndFeel.LookAndFeelHelper.ForceDefaultLookAndFeelChanged();<br />或者<br />DevExpress.Skins.SkinManager.DisableFormSkins();<br />DevExpress.LookAndFeel.LookAndFeelHelper.ForceDefaultLookAndFeelChanged();<br /><br /><br />动态换皮肤<br /></span><span style="color: #008000">//</span><span style="color: #008000">添加控件&nbsp;comboBoxEdit1</span><span style="color: #008000"><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;partial&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Form1&nbsp;:&nbsp;&nbsp;DevExpress.XtraEditors.XtraForm<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Form1()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(SkinContainer&nbsp;cnt&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;SkinManager.Default.Skins)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comboBoxEdit1.Properties.Items.Add(cnt.SkinName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comboBoxEdit1.SelectedIndexChanged&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EventHandler(comboBoxEdit1_SelectedIndexChanged);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;comboBoxEdit1_SelectedIndexChanged(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ComboBoxEdit&nbsp;comboBox&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sender&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;ComboBoxEdit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;skinName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;comboBox.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName&nbsp;=&nbsp;skinName;</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.LookAndFeel.SkinName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;skinName;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /></span><span style="color: #008000">//</span><span style="color: #008000">using&nbsp;DevExpress.XtraBars.Helpers;</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;partial&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Form1&nbsp;:&nbsp;&nbsp;DevExpress.XtraEditors.XtraForm<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Form1()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.barManager1.ForceInitialize();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alertControl1.BeforeFormShow&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;alertControl1_BeforeFormShow;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">禁止barManage右键显示</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.barManager1.AllowCustomization&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.barManager1.AllowShowToolbarsPopup&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">去除barManage右边小三角&nbsp;自定制</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.barManager1.AllowQuickCustomization&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.LookAndFeel.UseDefaultLookAndFeel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">添加一个BarSubItem&nbsp;DevExpress.XtraBars.BarSubItem&nbsp;mPaintStyle;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">添加换肤</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SkinHelper.InitSkinPopupMenu(mPaintStyle);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">标题栏支持皮肤</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DevExpress.Skins.SkinManager.EnableFormSkins();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div><img src ="http://www.cppblog.com/aaxron/aggbug/214020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-07-21 09:54 <a href="http://www.cppblog.com/aaxron/archive/2016/07/21/214020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#关键字implicit 和 explicit</title><link>http://www.cppblog.com/aaxron/archive/2016/06/17/213744.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 17 Jun 2016 06:06:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/06/17/213744.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213744.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/06/17/213744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213744.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213744.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">C#关键字implicit&nbsp;和&nbsp;</span><span style="color: #0000ff">explicit</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">explicit</span><span style="color: #000000">（C#&nbsp;参考）<br /></span><span style="color: #0000ff">explicit</span><span style="color: #000000">&nbsp;关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。&nbsp;例如，在下面的示例中，此运算符将名为&nbsp;Fahrenheit&nbsp;的类转换为名为&nbsp;Celsius&nbsp;的类：<br /></span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Must&nbsp;be&nbsp;defined&nbsp;inside&nbsp;a&nbsp;class&nbsp;called&nbsp;Fahrenheit:</span><span style="color: #008000"><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">explicit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;Celsius(Fahrenheit&nbsp;fahr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Celsius((</span><span style="color: #000000">5.0f</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">9.0f</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;(fahr.degrees&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">32</span><span style="color: #000000">));<br />}<br />可以如下所示调用此转换运算符：<br />Fahrenheit&nbsp;fahr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Fahrenheit(</span><span style="color: #000000">100.0f</span><span style="color: #000000">);<br />Console.Write(</span><span style="color: #000000">"</span><span style="color: #000000">{0}&nbsp;Fahrenheit</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;fahr.Degrees);<br />Celsius&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Celsius)fahr;<br />转换运算符将源类型转换为目标类型。&nbsp;源类型提供转换运算符。&nbsp;与隐式转换不同，必须通过强制转换的方式来调用显式转换运算符。&nbsp;如果转换操作可能导致异常或丢失信息，则应将其标记为&nbsp;</span><span style="color: #0000ff">explicit</span><span style="color: #000000">。&nbsp;这可以防止编译器无提示地调用可能产生无法预见后果的转换操作。<br />省略此强制转换将导致编译时错误&nbsp;CS0266。<br /><br /></span><span style="color: #0000ff">implicit</span><span style="color: #000000">（C#&nbsp;参考）<br /></span><span style="color: #0000ff">implicit</span><span style="color: #000000">&nbsp;关键字用于声明隐式的用户定义类型转换运算符。&nbsp;如果可以确保转换过程不会造成数据丢失，则可使用该关键字在用户定义类型和其他类型之间进行隐式转换。<br />隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。&nbsp;但是，因为隐式转换不需要程序员将一种类型显式强制转换为另一种类型，所以使用隐式转换时必须格外小心，以免出现意外结果。&nbsp;一般情况下，隐式转换运算符应当从不引发异常并且从不丢失信息，以便可以在程序员不知晓的情况下安全使用它们。&nbsp;如果转换运算符不能满足那些条件，则应将其标记为&nbsp;</span><span style="color: #0000ff">explicit</span><span style="color: #000000">。&nbsp;<br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Digit<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Digit(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d)&nbsp;{&nbsp;val&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;d;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;val;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />other&nbsp;members<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;User-defined&nbsp;conversion&nbsp;from&nbsp;Digit&nbsp;to&nbsp;double</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">implicit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">(Digit&nbsp;d)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;d.val;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;User-defined&nbsp;conversion&nbsp;from&nbsp;double&nbsp;to&nbsp;Digit</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">implicit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;Digit(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Digit(d);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Digit&nbsp;dig&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Digit(</span><span style="color: #000000">7</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">This&nbsp;call&nbsp;invokes&nbsp;the&nbsp;implicit&nbsp;"double"&nbsp;operator</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;num&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dig;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">This&nbsp;call&nbsp;invokes&nbsp;the&nbsp;implicit&nbsp;"Digit"&nbsp;operator</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Digit&nbsp;dig2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">12</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">num&nbsp;=&nbsp;{0}&nbsp;dig2&nbsp;=&nbsp;{1}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;num,&nbsp;dig2.val);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/213744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-06-17 14:06 <a href="http://www.cppblog.com/aaxron/archive/2016/06/17/213744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态调用WebService(C#)</title><link>http://www.cppblog.com/aaxron/archive/2016/06/17/213743.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 17 Jun 2016 02:53:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/06/17/213743.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213743.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/06/17/213743.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213743.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213743.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->动态调用WebService(C#)转自:http://www.cnblogs.com/xuwb/archive/2012/09/25/2701629.html通常我们在程序中需要调用WebService...&nbsp;&nbsp;<a href='http://www.cppblog.com/aaxron/archive/2016/06/17/213743.html'>阅读全文</a><img src ="http://www.cppblog.com/aaxron/aggbug/213743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-06-17 10:53 <a href="http://www.cppblog.com/aaxron/archive/2016/06/17/213743.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService操作</title><link>http://www.cppblog.com/aaxron/archive/2016/06/17/213742.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Fri, 17 Jun 2016 02:33:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/06/17/213742.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213742.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/06/17/213742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213742.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213742.html</trackback:ping><description><![CDATA[<p>WebService操作<br />转自:<br /><a href="http://blog.csdn.net/hi_kong/article/details/46356801">http://blog.csdn.net/hi_kong/article/details/46356801</a></p>
<p><a href="http://www.cnblogs.com/wayne-ivan/archive/2014/07/14/3842341.html">http://www.cnblogs.com/wayne-ivan/archive/2014/07/14/3842341.html</a></p><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000">一、服务器端：<br />在VS2010中新建项目，首先选择.net&nbsp;framework2.</span><span style="color: #000000">0</span><span style="color: #000000">，然后再选择web服务应用程序。如图所示：<br />然后在Service.cs文件中添加自己的方法即可。<br />二、C#winform调用webservice服务<br /><br />新建C#winfrom工程，右键引用</span><span style="color: #000000">-</span><span style="color: #000000">》添加服务引用</span><span style="color: #000000">-</span><span style="color: #000000">》高级</span><span style="color: #000000">-</span><span style="color: #000000">》添加web引用，在URL后添加需要连接的url（运行上面web服务程序浏览器中就会出现连接的url），然后点击后面的箭头，再点添加引用即可。<br />假设引用的服务名为WebReference，类名称为Service，<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.Services;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Web.Services.Description;<br />在代码中如下操作：<br /><br />WebReference.Service1&nbsp;helloWord&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WebReference.Service1();<br />helloWord&nbsp;.Url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">WebUrl;</span><span style="color: #008000">//</span><span style="color: #008000">设置url</span><span style="color: #008000"><br /></span><span style="color: #000000">helloWord.helloWord（）;</span><span style="color: #008000">//</span><span style="color: #008000">调用webservice中的方法</span><span style="color: #008000"><br /></span><span style="color: #000000">结束。<br /><br /><br />WebService处理大数据量数据<br />在通过WebService处理大数据量数据时出现如下错误：<br />soap&nbsp;fault:&nbsp;运行配置文件中指定的扩展时出现异常。&nbsp;</span><span style="color: #000000">---&gt;</span><span style="color: #000000">&nbsp;超过了最大请求长度。&nbsp;<br />解决方法：<br />因为上传的文件大于系统默认配置的值，asp.net&nbsp;web&nbsp;service默认的请求长度是4M。<br /></span><span style="color: #000000">1</span><span style="color: #000000">、针对单个项目，只需修改Web.config就可以了：<br />修改配置可以在web.config中重新设置，如下：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">httpRuntime&nbsp;</span><span style="color: #ff0000">maxRequestLength</span><span style="color: #0000ff">="1048576"</span><span style="color: #ff0000">&nbsp;executionTimeout</span><span style="color: #0000ff">="3600"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span></div><br /></span></div><img src ="http://www.cppblog.com/aaxron/aggbug/213742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-06-17 10:33 <a href="http://www.cppblog.com/aaxron/archive/2016/06/17/213742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>精简版本WCF  DEMO</title><link>http://www.cppblog.com/aaxron/archive/2016/06/16/213727.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 16 Jun 2016 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/06/16/213727.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213727.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/06/16/213727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213727.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213727.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.ServiceModel;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">添加System.ServiceModel引用</span><span style="color: #008000"><br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.ServiceModel.Channels;<br /><br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;ConsoleApplication1<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;[ServiceContract]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IHelloWCF<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[OperationContract]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Say(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;input);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">sealed</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HelloService&nbsp;:&nbsp;IHelloWCF<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Say(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;input)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;input);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uri&nbsp;address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Uri(</span><span style="color: #000000">"</span><span style="color: #000000">http://127.0.0.1:8733/IHelloWCF</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BasicHttpBinding&nbsp;binding&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BasicHttpBinding();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServiceHost&nbsp;svc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ServiceHost(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(HelloService));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svc.AddServiceEndpoint(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(IHelloWCF),&nbsp;binding,&nbsp;address);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svc.Opened&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;HelloWCF&nbsp;receiving&nbsp;application&nbsp;is&nbsp;ready</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svc.Open();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChannelFactory</span><span style="color: #000000">&lt;</span><span style="color: #000000">IHelloWCF</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ChannelFactory</span><span style="color: #000000">&lt;</span><span style="color: #000000">IHelloWCF</span><span style="color: #000000">&gt;</span><span style="color: #000000">(binding,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EndpointAddress(address));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IHelloWCF&nbsp;proxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.CreateChannel();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy.Say(</span><span style="color: #000000">"</span><span style="color: #000000">张三</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy.Say(</span><span style="color: #000000">"</span><span style="color: #000000">李四</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy.Say(</span><span style="color: #000000">"</span><span style="color: #000000">王二麻子</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svc.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div> <img src ="http://www.cppblog.com/aaxron/aggbug/213727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-06-16 09:46 <a href="http://www.cppblog.com/aaxron/archive/2016/06/16/213727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WCF元数据公布的2种方式：httpGetEnabled与mex</title><link>http://www.cppblog.com/aaxron/archive/2016/06/15/213718.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 15 Jun 2016 07:42:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/06/15/213718.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213718.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/06/15/213718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213718.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213718.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">WCF元数据公布的2种方式：httpGetEnabled与mex<br />一、元数据即WSDL，描述了服务的细节，以便客户端使用。<br />二、必须为服务配置ServiceMetadata行为，才能为其生成WSDL，才能再使用httpGetEnabled或mex将其公布出去<br />三、这两种方式公布出去的WSDL无区别。但公布的方式有区别<br /></span><span style="color: #000000">1</span><span style="color: #000000">、httpGetEnabled</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">，类似的还有httpsGetEnabled</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000"><br />此方式通过在服务在的URL后加&#8220;</span><span style="color: #000000">?</span><span style="color: #000000">wsdl&#8221;的方式公布WSDL，可直接通过HTTP访问得到。<br /><br /></span><span style="color: #000000">2</span><span style="color: #000000">、mex<br />此方式以一般的终结点方式公布，支持各种协议：http、tcp、NamedPipe</span></div> <img src ="http://www.cppblog.com/aaxron/aggbug/213718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-06-15 15:42 <a href="http://www.cppblog.com/aaxron/archive/2016/06/15/213718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WCF 数据契约（DataContract）</title><link>http://www.cppblog.com/aaxron/archive/2016/06/13/213700.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 13 Jun 2016 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/06/13/213700.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213700.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/06/13/213700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213700.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213700.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">数据契约（DataContract）<br />服务契约定义了远程访问对象和可供调用的方法，数据契约则是服务端和客户端之间要传送的自定义数据类型。<br />一旦声明一个类型为DataContract，那么该类型就可以被序列化在服务端和客户端之间传送，如下所示。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DataContract]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UserInfo<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&#8230;.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />只有声明为DataContract的类型的对象可以被传送，且只有成员属性会被传递，成员方法不会被传递。WCF对声明为DataContract的类型提供更加细节的控制，可以把一个成员排除在序列化范围以外，也就是说，客户端程序不会获得被排除在外的成员的任何信息，包括定义和数据。默认情况下，所有的成员属性都被排除在外，因此需要把每一个要传送的成员声明为DataMember，如下所示。<br />&nbsp;&nbsp;&nbsp;&nbsp;[DataContract]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UserInfo<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DataMember]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;UserName<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DataMember]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Age<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DataMember]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Location<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Zodiac<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />上面这段代码把UserInfo类声明为DataContract，将UserName、Age、Location这3个属性声明为DataMember（数据成员）。Zodiac成员没有被声明为DataMember，因此在交换数据时，不会传输Zodiac的任何信息。<br />DataContract也支持Name</span><span style="color: #000000">/</span><span style="color: #000000">Namespace属性，如同ServiceContract，Name和Namespace可以自定义名称和命名空间，客户端将使用自定义的名称和命名空间对DataContract类型进行访问。<br />声明为DataMember的成员也可以自定义客户端可见的名称，例如：<br />[DataMember(Name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Name</span><span style="color: #000000">"</span><span style="color: #000000">)]<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;UserName<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;<br />}<br />[DataMember(Name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Age</span><span style="color: #000000">"</span><span style="color: #000000">)]<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;UserAge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;<br />}<br />除了Name和Namespace以外，DataMember还有以下参数，它们的含义分别如下。<br />（</span><span style="color: #000000">1</span><span style="color: #000000">）IsRequired：值为true时，要求序列化引擎检查对象是否存在该值；若无，则会有异常抛出。<br />（</span><span style="color: #000000">2</span><span style="color: #000000">）Order：bool类型值，值为true时，序列化和反序列化过程将会按成员定义的顺序进行，这对依赖于成员位置的反序列化过程无比重要。<br />（</span><span style="color: #000000">3</span><span style="color: #000000">）EmitDefaultvalue：为成员属性设置一个默认值。</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/213700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-06-13 17:52 <a href="http://www.cppblog.com/aaxron/archive/2016/06/13/213700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>char*和wchar_t* 转String^</title><link>http://www.cppblog.com/aaxron/archive/2015/12/21/212530.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 21 Dec 2015 11:07:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/21/212530.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212530.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/21/212530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212530.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212530.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">#include</span>&nbsp;"stdafx.h"<br /><span style="color: #0000ff;">#include&nbsp;</span>&lt;msclr/marshal.h&gt;<br /><span style="color: #0000ff;">#</span><span style="color: #0000FF; ">using</span>&nbsp;&lt;mscorlib.dll&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System::Text;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System::Runtime::InteropServices;<br /><br />#ifdef&nbsp;_MANAGED<br /><span style="color: #0000FF; ">#endif</span><br /><br /><span style="color: #0000FF; ">void</span>&nbsp;abc123()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;msclr::interop;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;msg1&nbsp;=&nbsp;"Test&nbsp;String&nbsp;to&nbsp;Marshal";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;msg2=&nbsp;L"Good&nbsp;Luck&nbsp;Aaron";<br />&nbsp;&nbsp;&nbsp;&nbsp;String^&nbsp;aMsg&nbsp;=&nbsp;marshal_as&lt;String^&gt;(msg1);<br />&nbsp;&nbsp;&nbsp;&nbsp;String^&nbsp;uMsg&nbsp;=&nbsp;marshal_as&lt;String^&gt;(msg2);<br />&nbsp;&nbsp;&nbsp;&nbsp;Console::WriteLine(aMsg);<br />&nbsp;&nbsp;&nbsp;&nbsp;Console::WriteLine(uMsg);<br />}<br /><span style="color: #0000ff;">#pragma</span><span style="color: #0000ff;">&nbsp;unmanaged</span><br /><span style="color: #0000FF; ">int</span>&nbsp;_tmain(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;_TCHAR*&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;abc123();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000;">system(</span>"pause");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /><span style="color: #0000ff;">#pragma&nbsp;managed&nbsp;</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/212530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-21 19:07 <a href="http://www.cppblog.com/aaxron/archive/2015/12/21/212530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>略谈GCHandle【转】</title><link>http://www.cppblog.com/aaxron/archive/2015/12/21/212529.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 21 Dec 2015 10:36:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/21/212529.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212529.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/21/212529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212529.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212529.html</trackback:ping><description><![CDATA[<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 />-->略谈GCHandle【转】<br />http:<span style="color: #008000; ">//</span><span style="color: #008000; ">blog.163.com/vk_01313/blog/static/17219228200912491729457/</span><span style="color: #008000; "><br /></span>我们在使用c#托管代码时，内存地址和GC回收那不是我们关心的，CLR已经给我们暗箱操作。<br />但是如果我们在c#中调用了一个非托管代码，比如vc的DLL,而且他有个回调函数，需要引用c#中的某个对象并操作，<br />这时候你就得要小心了。<br />要是非托管代码中用到得托管代码那个对象被GC给回收了，这时候就会报内存错误。<br />所以我们就要把那个对象&#8220;钉&#8221;住(pin)，让它的内存地址固定，而不被垃圾回收掉，然后最后我们自己管理，自己释放内存,这时候就需要GCHandle,来看个msdn上的例子:<br /><br /><br /><span style="color: #0000FF; ">using</span>&nbsp;System.Runtime.InteropServices;<br /><br /><span style="color: #0000FF; ">namespace</span>&nbsp;ConsoleApplication1<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">C#</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">delegate</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;CallBack(<span style="color: #0000FF; ">int</span>&nbsp;handle,&nbsp;IntPtr&nbsp;param);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;LibWrap<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport("user32.dll")]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;EnumWindows(CallBack&nbsp;cb,&nbsp;IntPtr&nbsp;param);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextWriter&nbsp;tw&nbsp;=&nbsp;System.Console.Out;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GCHandle&nbsp;gch&nbsp;=&nbsp;GCHandle.Alloc(tw);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CallBack&nbsp;cewp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CallBack(CaptureEnumWindowsProc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LibWrap.EnumWindows(cewp,&nbsp;(IntPtr)gch);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gch.Free();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;CaptureEnumWindowsProc(<span style="color: #0000FF; ">int</span>&nbsp;handle,&nbsp;IntPtr&nbsp;param)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GCHandle&nbsp;gch&nbsp;=&nbsp;(GCHandle)param;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextWriter&nbsp;tw&nbsp;=&nbsp;(TextWriter)gch.Target;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tw.WriteLine(handle);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />}<br /><br /><br />对上面的代码，略加解释：gch&nbsp;会钉住(pin)tw这个对象，使其不受GC管理，告诉它，以后你崩管我，我也不用给你上税,其实管理权已经给gch，通过free来释放内存。<br />这种情况主要用在托管和非托管代码交互的时候，防止内存泄露来使用GCHandle。</div><img src ="http://www.cppblog.com/aaxron/aggbug/212529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-21 18:36 <a href="http://www.cppblog.com/aaxron/archive/2015/12/21/212529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pin_ptr 和 interior_ptr</title><link>http://www.cppblog.com/aaxron/archive/2015/12/21/212528.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 21 Dec 2015 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/21/212528.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212528.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/21/212528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212528.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212528.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 />-->CLR语法中，值类型指针分为两种类型：V*（限于非&nbsp;CLR&nbsp;堆位置）和内部指针&nbsp;interior_ptr&lt;V&gt;（允许但不要求托管堆内的地址）。<br /><br /><br />钉住指针<br />通常，在压缩阶段，垃圾回收器可选择将驻留在&nbsp;CLR&nbsp;堆上的对象移动到堆内的不同位置。这种移动对于跟踪句柄、跟踪引用和内部指针而言不是问题，它们都透明地更新这些实体。但是，如果用户在运行时环境外传递了&nbsp;CLR&nbsp;堆上对象的地址，这种移动就会导致问题。在这种情况下，对象的不稳定运动可能导致运行时失败。要避免此类对象的移动，必须在本地将它们钉在自己的位置上以供外部使用。<br /><br />在托管扩展中，&#8220;钉住指针&#8221;是通过使用&nbsp;__pin&nbsp;关键字限定指针声明来声明的。下面是一个来自托管扩展规范的经过略微修改的示例：<br /><br />&nbsp;&nbsp;复制代码&nbsp;<br />__gc&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;H&nbsp;{&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;j;&nbsp;};<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;H&nbsp;*&nbsp;h&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;H;<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;__pin&nbsp;*&nbsp;k&nbsp;=&nbsp;&amp;&nbsp;h&nbsp;-&gt;&nbsp;j;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&#8230;</span><span style="color: #008000; "><br /></span>};<br />&nbsp;<br /><br />在新的语言设计中，钉住指针是使用类似于内部指针的语法来声明的。<br /><br />&nbsp;&nbsp;复制代码&nbsp;<br /><span style="color: #0000FF; ">ref</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;H<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;j;<br />};<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;H^&nbsp;h&nbsp;=&nbsp;gcnew&nbsp;H;<br />&nbsp;&nbsp;&nbsp;pin_ptr&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;k&nbsp;=&nbsp;&amp;h-&gt;j;<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&#8230;</span><span style="color: #008000; "><br /></span>}<br /><br /><br /><br />interior_ptr<br />Declares&nbsp;a&nbsp;pointer&nbsp;to&nbsp;inside&nbsp;a&nbsp;reference&nbsp;type,&nbsp;but&nbsp;not&nbsp;to&nbsp;the&nbsp;<span style="color: #0000FF; ">object</span>&nbsp;itself.&nbsp;An&nbsp;interior&nbsp;pointer&nbsp;can&nbsp;point&nbsp;to&nbsp;a&nbsp;reference&nbsp;handle,&nbsp;value&nbsp;type,&nbsp;boxed&nbsp;type&nbsp;handle,&nbsp;member&nbsp;of&nbsp;a&nbsp;managed&nbsp;type,&nbsp;or&nbsp;to&nbsp;an&nbsp;element&nbsp;of&nbsp;a&nbsp;managed&nbsp;array.&nbsp;<br />cli::interior_ptr&lt;cv_qualifier&nbsp;type&gt;&nbsp;var&nbsp;=&nbsp;&amp;initializer;<br /><br />Remarks<br />A&nbsp;native&nbsp;pointer&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;not&nbsp;able&nbsp;to&nbsp;track&nbsp;an&nbsp;item&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;its&nbsp;location&nbsp;changes&nbsp;on&nbsp;the&nbsp;managed&nbsp;heap,&nbsp;which&nbsp;results&nbsp;from&nbsp;the&nbsp;garbage&nbsp;collector&nbsp;moving&nbsp;instances&nbsp;of&nbsp;an&nbsp;<span style="color: #0000FF; ">object</span>.&nbsp;In&nbsp;order&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;a&nbsp;pointer&nbsp;to&nbsp;correctly&nbsp;refer&nbsp;to&nbsp;the&nbsp;instance,&nbsp;the&nbsp;runtime&nbsp;needs&nbsp;to&nbsp;update&nbsp;the&nbsp;pointer&nbsp;to&nbsp;the&nbsp;newly&nbsp;positioned&nbsp;<span style="color: #0000FF; ">object</span>.<br /><br />An&nbsp;interior_ptr&nbsp;represents&nbsp;a&nbsp;superset&nbsp;of&nbsp;the&nbsp;functionality&nbsp;of&nbsp;a&nbsp;native&nbsp;pointer.&nbsp;Therefore,&nbsp;anything&nbsp;that&nbsp;can&nbsp;be&nbsp;assigned&nbsp;to&nbsp;a&nbsp;native&nbsp;pointer&nbsp;can&nbsp;also&nbsp;be&nbsp;assigned&nbsp;to&nbsp;an&nbsp;interior_ptr.&nbsp;An&nbsp;interior&nbsp;pointer&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;permitted&nbsp;to&nbsp;perform&nbsp;the&nbsp;same&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;of&nbsp;operations&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;native&nbsp;pointers,&nbsp;including&nbsp;comparison&nbsp;and&nbsp;pointer&nbsp;arithmetic.<br /><br />An&nbsp;interior&nbsp;pointer&nbsp;can&nbsp;only&nbsp;be&nbsp;declared&nbsp;on&nbsp;the&nbsp;stack.&nbsp;An&nbsp;interior&nbsp;pointer&nbsp;cannot&nbsp;be&nbsp;declared&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;a&nbsp;member&nbsp;of&nbsp;a&nbsp;<span style="color: #0000FF; ">class</span>.<br /><br />Since&nbsp;interior&nbsp;pointers&nbsp;exist&nbsp;only&nbsp;on&nbsp;the&nbsp;stack,&nbsp;taking&nbsp;the&nbsp;address&nbsp;of&nbsp;an&nbsp;interior&nbsp;pointer&nbsp;yields&nbsp;an&nbsp;unmanaged&nbsp;pointer.<br /><br />interior_ptr&nbsp;has&nbsp;an&nbsp;<span style="color: #0000FF; ">implicit</span>&nbsp;conversion&nbsp;to&nbsp;<span style="color: #0000FF; ">bool</span>,&nbsp;which&nbsp;allows&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;its&nbsp;use&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;conditional&nbsp;statements.<br /><br />For&nbsp;information&nbsp;on&nbsp;how&nbsp;to&nbsp;declare&nbsp;an&nbsp;interior&nbsp;pointer&nbsp;that&nbsp;points&nbsp;into&nbsp;an&nbsp;<span style="color: #0000FF; ">object</span>&nbsp;that&nbsp;cannot&nbsp;be&nbsp;moved&nbsp;on&nbsp;the&nbsp;garbage-collected&nbsp;heap,&nbsp;see&nbsp;pin_ptr.<br /><br />interior_ptr&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;cli&nbsp;<span style="color: #0000FF; ">namespace</span>.&nbsp;See&nbsp;cli&nbsp;Namespace&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;more&nbsp;information.<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">Example<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;interior_ptr.cpp<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;compile&nbsp;with:&nbsp;/clr</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br /><br /><span style="color: #0000FF; ">ref</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyClass&nbsp;{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;data;<br />};<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br />&nbsp;&nbsp;&nbsp;MyClass&nbsp;^&nbsp;h_MyClass&nbsp;=&nbsp;gcnew&nbsp;MyClass;<br />&nbsp;&nbsp;&nbsp;h_MyClass-&gt;data&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;Console::WriteLine(h_MyClass-&gt;data);<br /><br />&nbsp;&nbsp;&nbsp;interior_ptr&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;p&nbsp;=&nbsp;&amp;(h_MyClass-&gt;data);<br />&nbsp;&nbsp;&nbsp;*p&nbsp;=&nbsp;2;<br />&nbsp;&nbsp;&nbsp;Console::WriteLine(h_MyClass-&gt;data);<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;alternatively</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;interior_ptr&lt;MyClass&nbsp;^&gt;&nbsp;p2&nbsp;=&nbsp;&amp;h_MyClass;<br />&nbsp;&nbsp;&nbsp;(*p2)-&gt;data&nbsp;=&nbsp;3;<br />&nbsp;&nbsp;&nbsp;Console::WriteLine((*p2)-&gt;data);<br />}<br /><br />&nbsp;<br /><br /><br />&nbsp;</div><img src ="http://www.cppblog.com/aaxron/aggbug/212528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-21 17:11 <a href="http://www.cppblog.com/aaxron/archive/2015/12/21/212528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StructLayout特性</title><link>http://www.cppblog.com/aaxron/archive/2015/12/21/212527.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 21 Dec 2015 08:27:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/21/212527.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212527.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/21/212527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212527.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212527.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 />-->StructLayout特性<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公共语言运行库利用StructLayoutAttribute控制类或结构的数据字段在托管内存中的物理布局,即类或结构需要按某种方式排列。如果要将类传递给需要指定布局的非托管代码，则显式控制类布局是重要的。它的构造函数中用&nbsp;LayoutKind值初始化&nbsp;StructLayoutAttribute&nbsp;类的新实例。&nbsp;LayoutKind.Sequential&nbsp;用于强制将成员按其出现的顺序进行顺序布局。<br />&nbsp;<br />&nbsp;&nbsp;StructLayout特性允许我们控制Structure语句块的元素在内存中的排列方式,以及当这些元素被传递给外部DLL时，运行库排列这些元素的方式。Visual&nbsp;&nbsp;&nbsp;Basic结构的成员在内存中的顺序是按照它们出现在源代码中的顺序排列的，尽管编译器可以自由的插入填充字节来安排这些成员，以便使得16位数值用子边界对齐，32位数值用双字边界对齐。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;使用这种排列（未压缩布局）提供的性能最佳。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />通过System.Runtime.InteropServices.StructLayout&nbsp;&nbsp;&nbsp;特性精确的控制每一个结构成员的位置。<br />System.Runtime.InteropServices.StructLayout&nbsp;&nbsp;&nbsp;允许的值有:<br /><strong><span style="color: red;">StructLayout.Auto&nbsp;&nbsp;&nbsp;</span><br /><span style="color: red;">StructLayout.Sequential&nbsp;&nbsp;&nbsp;</span><br /><span style="color: red;">StructLayout.Explicit &nbsp;</span></strong>&nbsp;&nbsp;<br /><br />1.Sequential,顺序布局,比如<br /><span style="color: #0000FF; ">struct</span>&nbsp;S1<br />{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b;<br />}<br />那么默认情况下在内存里是先排a,再排b<br />也就是如果能取到a的地址,和b的地址,则相差一个int类型的长度,4字节<br />[StructLayout(LayoutKind.Sequential)]&nbsp;<br /><span style="color: #0000FF; ">struct</span>&nbsp;S1<br />{<br />&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b;<br />}<br />这样和上一个是一样的.因为默认的内存排列就是Sequential,也就是按成员的先后顺序排列.<br />2.Explicit,精确布局<br />需要用FieldOffset()设置每个成员的位置<br />这样就可以实现类似c的公用体(union)的功能<br />[StructLayout(LayoutKind.Explicit)]&nbsp;<br /><span style="color: #0000FF; ">struct</span>&nbsp;S1<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;[FieldOffset(0)]&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;[FieldOffset(0)]&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b;<br />}<br />这样a和b在内存中地址相同&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;StructLayout特性支持三种附加字段：CharSet、Pack、Size。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&#183;&nbsp;&nbsp;&nbsp;CharSet定义在结构中的字符串成员在结构被传给DLL时的排列方式。可以是Unicode、Ansi或Auto。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;默认为Auto，在WIN&nbsp;&nbsp;&nbsp;NT/2000/XP中表示字符串按照Unicode字符串进行排列，在WIN&nbsp;&nbsp;&nbsp;95/98/Me中则表示按照ANSI字符串进行排列。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&#183;&nbsp;&nbsp;&nbsp;Pack定义了结构的封装大小。可以是1、2、4、8、16、32、64、128或特殊值0。特殊值0表示当前操作平台默认的压缩大小。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br /><br />&nbsp;&nbsp;[StructLayout(LayoutKind.Sequential,&nbsp;CharSet&nbsp;=&nbsp;CharSet.Ansi)]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;LIST_OPEN<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dwServerId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dwListId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;System.UInt16&nbsp;wRecordSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;System.UInt16&nbsp;wDummy;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dwFileSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dwTotalRecs;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;NS_PREFETCHLIST&nbsp;sPrefetch;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[MarshalAs(UnmanagedType.ByValTStr,&nbsp;SizeConst&nbsp;=&nbsp;24)]&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;szSrcMach;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[MarshalAs(UnmanagedType.ByValTStr,&nbsp;SizeConst&nbsp;=&nbsp;24)]&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;szSrcComp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />此例中用到MashalAs特性，它用于描述字段、方法或参数的封送处理格式。用它作为参数前缀并指定目标需要的数据类型。<br />例如，以下代码将两个参数作为数据类型长指针封送给&nbsp;Windows&nbsp;API&nbsp;函数的字符串&nbsp;(LPStr)：&nbsp;<br />[MarshalAs(UnmanagedType.LPStr)]&nbsp;String&nbsp;existingfile;&nbsp;<br /><br />[MarshalAs(UnmanagedType.LPStr)]&nbsp;String&nbsp;newfile;&nbsp;<br /><br />注意结构作为参数时候，一般前面要加上ref修饰符，否则会出现错误：对象的引用没有指定对象的实例。<br />[&nbsp;DllImport(&nbsp;"kernel32",&nbsp;EntryPoint="GetVersionEx"&nbsp;)]&nbsp;<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">extern</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;GetVersionEx2(&nbsp;<span style="color: #0000FF; ">ref</span>&nbsp;OSVersionInfo2&nbsp;osvi&nbsp;);<br /><br /><br /><span style="color: #0000FF; ">string</span>&nbsp;result;<br />IntPtr&nbsp;strPtr&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IntPtr()&nbsp;;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;unmanaged&nbsp;api&nbsp;TestStringAsResultIntPrt(1);</span><span style="color: #008000; "><br /></span>result&nbsp;=&nbsp;Marshal.PtrToStringUni(strPtr);<br />result&nbsp;= Marshal.PtrToStringAnsi(strPtr);<br />Marshal.FreeCoTaskMem(strPtr);</div><img src ="http://www.cppblog.com/aaxron/aggbug/212527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-21 16:27 <a href="http://www.cppblog.com/aaxron/archive/2015/12/21/212527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何：将 System::String 转换为标准字符串</title><link>http://www.cppblog.com/aaxron/archive/2015/12/14/212478.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 14 Dec 2015 07:46:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/14/212478.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212478.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/14/212478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212478.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212478.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: #008000; ">//</span><span style="color: #008000; ">《精通.NET互操作：P/Invoke、C++&nbsp;Interop和COM&nbsp;Interop》<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">ms-help:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vccore/html/79e2537e-d4eb-459f-9506-0e738045b59e.htm<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;convert_system_string.cpp<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;compile&nbsp;with:&nbsp;/clr</span><span style="color: #008000; "><br /></span>#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>&gt;<br />#include&nbsp;&lt;iostream&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;MarshalString&nbsp;(&nbsp;String&nbsp;^&nbsp;s,&nbsp;<span style="color: #0000FF; ">string</span>&amp;&nbsp;os&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;Runtime::InteropServices;<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;chars&nbsp;=&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();<br />&nbsp;&nbsp;&nbsp;os&nbsp;=&nbsp;chars;<br />&nbsp;&nbsp;&nbsp;Marshal::FreeHGlobal(IntPtr((<span style="color: #0000FF; ">void</span>*)chars));<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;MarshalString&nbsp;(&nbsp;String&nbsp;^&nbsp;s,&nbsp;wstring&amp;&nbsp;os&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;Runtime::InteropServices;<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*&nbsp;chars&nbsp;=&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();<br />&nbsp;&nbsp;&nbsp;os&nbsp;=&nbsp;chars;<br />&nbsp;&nbsp;&nbsp;Marshal::FreeHGlobal(IntPtr((<span style="color: #0000FF; ">void</span>*)chars));<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;a&nbsp;=&nbsp;"test";<br />&nbsp;&nbsp;&nbsp;wstring&nbsp;b&nbsp;=&nbsp;L"test2";<br />&nbsp;&nbsp;&nbsp;String&nbsp;^&nbsp;c&nbsp;=&nbsp;gcnew&nbsp;String("abcd");<br /><br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;a&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;MarshalString(c,&nbsp;a);<br />&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;"efgh";<br />&nbsp;&nbsp;&nbsp;MarshalString(c,&nbsp;b);<br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;a&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;wcout&nbsp;&lt;&lt;&nbsp;b&nbsp;&lt;&lt;&nbsp;endl;<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/212478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-14 15:46 <a href="http://www.cppblog.com/aaxron/archive/2015/12/14/212478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++的dll调用C#的dll</title><link>http://www.cppblog.com/aaxron/archive/2015/12/07/212433.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 07 Dec 2015 12:23:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/07/212433.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212433.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/07/212433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212433.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212433.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 />-->C++的dll调用C#的dll<br />1）用C#写任何的类库，如：NeoWayMesCommon.dll<br />2）C++的dll中要引用此类库，注意不能在stdafx.h中引用，最后是在cpp文件中引用。<br />#<span style="color: #0000FF; ">using</span>&nbsp;&lt;mscorlib.dll&gt;<br />#<span style="color: #0000FF; ">using</span>&nbsp;"../Debug/NeoWayMesCommon.dll"&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">引用此类库</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;NeoWayMes;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br />3)&nbsp;C++&nbsp;编译设置一定设置为：支持公共语言运行时支持(/clr)<br />4)&nbsp;必须将C#的dll拷贝至VC工程运行的目录，否则报异常错误。<br />5) 其他的参见c++/cli语法标准</div><img src ="http://www.cppblog.com/aaxron/aggbug/212433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-07 20:23 <a href="http://www.cppblog.com/aaxron/archive/2015/12/07/212433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Double Thunking</title><link>http://www.cppblog.com/aaxron/archive/2015/12/01/212375.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 01 Dec 2015 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/01/212375.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212375.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/01/212375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212375.html</trackback:ping><description><![CDATA[<div><br />By default, when compiling with /clr (not /clr:pure), the definition of a managed function causes the compiler to generate a managed entry point and a native&nbsp;</div><br /><div></div><div>entry point. This allows the managed function to be called from native and managed call sites. However, when a native entry point exists, it can be the entry&nbsp;</div><div></div><div>point for all calls to the function. If a calling function is managed, the native entry point will then call the managed entry point. In effect, two calls&nbsp;</div><div></div><div>are required to invoke the function (hence, double thunking). For example, virtual functions are always called through a native entry point.</div><div>One resolution is to tell the compiler not to generate a native entry point for a managed function, that the function will only be called from a managed&nbsp;</div><div></div><div>context, by using the __clrcall calling convention.</div><div>Similarly, if you export (dllexport, dllimport) a managed function, a native entry point is generated and any function that imports and calls that function&nbsp;</div><div></div><div>will call through the native entry point. To avoid double thunking in this situation, do not use native export/import semantics; simply reference the&nbsp;</div><div></div><div>metadata via #using (see The #using Directive).</div><div>In Visual C++ 2005 the compiler was updated to reduce unnecessary double thunking. For example, any function with a managed type in the signature (including&nbsp;</div><div></div><div>return type) will implicitly be marked as __clrcall. For more information on double thunk elimination, see&nbsp;</div><div></div><div>http://msdn.microsoft.com/msdnmag/issues/05/01/COptimizations/default.aspx.</div><div>Example</div><div>The following sample demonstrates double thunking. When compiled native (without /clr), the call to the virtual function in main generates one call to T's&nbsp;</div><div></div><div>copy constructor and one call to the destructor. Similar behavior is achieved when the virtual function is declared with /clr and __clrcall. However, when&nbsp;</div><div></div><div>just compiled with /clr, the function call generates a call to the copy constructor but there is another call to the copy constructor due to the&nbsp;</div><div></div><div>native-to-managed thunk.</div><div></div><div></div><div></div><div>纯 MSIL 程序集可以调用非托管函数，但不能由非托管函数调用。因此，与非托管函数使用的服务器代码相比，纯 MSIL 更适合于使用非托管函数的客户端代码。</div><div></div><div></div><div>当我们使用/clr选项（不是/clr:pure）进行编译的时候，一个托管函数(managed function)，会导致编译器生成一个托管的入口点(managed entry point)和一个原生的入口点</div><div></div><div>(native entry point)，这样可以使得托管函数既可以被托管代码调用，也可以被原生代码调用。但是，当一个原生的入口点存在的时候，它将成为所有调用的入口点。也就是说</div><div></div><div>如果调用者是托管的，它还是会先去调用原生入口点，然后原生的入口点再去调用托管的入口点，这就意味着调用了两次函数入口点（Double Thunking）。&nbsp;<br /><br /><br /><br /><a title="c++ cli 标准" href="http://www.cppblog.com/Files/aaxron/CLI%E6%A0%87%E5%87%86.rar">c++ cli 标准</a></div><img src ="http://www.cppblog.com/aaxron/aggbug/212375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-01 11:14 <a href="http://www.cppblog.com/aaxron/archive/2015/12/01/212375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何：使用 C++ Interop 封送 ANSI 字符串</title><link>http://www.cppblog.com/aaxron/archive/2015/12/01/212373.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 01 Dec 2015 03:09:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/01/212373.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212373.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/01/212373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212373.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212373.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;MarshalANSI1.cpp<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;compile&nbsp;with:&nbsp;/clr</span><span style="color: #008000; "><br /></span>#include&nbsp;&lt;iostream&gt;<br />#include&nbsp;&lt;stdio.h&gt;<br /><br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System::Runtime::InteropServices;<br /><br />#pragma&nbsp;unmanaged<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;NativeTakesAString(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;p)&nbsp;{<br />&nbsp;&nbsp;&nbsp;printf_s("(native)&nbsp;received&nbsp;'%s'\n",&nbsp;p);<br />}<br /><br />#pragma&nbsp;managed<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br />&nbsp;&nbsp;&nbsp;String^&nbsp;s&nbsp;=&nbsp;gcnew&nbsp;String("sample&nbsp;string");<br />&nbsp;&nbsp;&nbsp;IntPtr&nbsp;ip&nbsp;=&nbsp;Marshal::StringToHGlobalAnsi(s);<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;str&nbsp;=&nbsp;static_cast&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&gt;(ip.ToPointer());<br /><br />&nbsp;&nbsp;&nbsp;Console::WriteLine("(managed)&nbsp;passing&nbsp;string<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />");<br />&nbsp;&nbsp;&nbsp;NativeTakesAString(&nbsp;str&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;Marshal::FreeHGlobal(&nbsp;ip&nbsp;);<br />}<br />&nbsp;<br /><br />下面的示例演示访问由非托管函数调用的托管函数中的&nbsp;ANSI&nbsp;字符串所需的数据封送处理。托管函数在接收到本机字符串时，可以直接使用该字符串，也可以按所示方式使用&nbsp;PtrToStringAnsi&nbsp;方法将其转换为托管字符串。<br /><br />&nbsp;&nbsp;复制代码&nbsp;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;MarshalANSI2.cpp<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;compile&nbsp;with:&nbsp;/clr</span><span style="color: #008000; "><br /></span>#include&nbsp;&lt;iostream&gt;<br />#include&nbsp;&lt;vcclr.h&gt;<br /><br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System::Runtime::InteropServices;<br /><br />#pragma&nbsp;managed<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;ManagedStringFunc(<span style="color: #0000FF; ">char</span>*&nbsp;s)&nbsp;{<br />&nbsp;&nbsp;&nbsp;String^&nbsp;ms&nbsp;=&nbsp;Marshal::PtrToStringAnsi(static_cast&lt;IntPtr&gt;(s));<br />&nbsp;&nbsp;&nbsp;Console::WriteLine("(managed):&nbsp;received&nbsp;'{0}'",&nbsp;ms);<br />}<br /><br />#pragma&nbsp;unmanaged<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;NativeProvidesAString()&nbsp;{<br />&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"(native)&nbsp;calling&nbsp;managed&nbsp;func<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />\n";<br />&nbsp;&nbsp;&nbsp;ManagedStringFunc("test&nbsp;string");<br />}<br /><br />#pragma&nbsp;managed<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br />&nbsp;&nbsp;&nbsp;NativeProvidesAString();<br />}<br />&nbsp;</div><img src ="http://www.cppblog.com/aaxron/aggbug/212373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-01 11:09 <a href="http://www.cppblog.com/aaxron/archive/2015/12/01/212373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何：将 System::String 转换为 wchar_t* 或 char*</title><link>http://www.cppblog.com/aaxron/archive/2015/12/01/212372.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 01 Dec 2015 03:08:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/12/01/212372.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212372.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/12/01/212372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212372.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212372.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><div>ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vccore/html/385da01b-5649-4543-8076-e3e251243ff0.htm</div><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;convert_string_to_wchar.cpp<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;compile&nbsp;with:&nbsp;/clr</span><span style="color: #008000; "><br /></span>#include&nbsp;&lt;&nbsp;stdio.h&nbsp;&gt;<br />#include&nbsp;&lt;&nbsp;stdlib.h&nbsp;&gt;<br />#include&nbsp;&lt;&nbsp;vcclr.h&nbsp;&gt;<br /><br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;System;<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br />&nbsp;&nbsp;&nbsp;String&nbsp;^str&nbsp;=&nbsp;"Hello";<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Pin&nbsp;memory&nbsp;so&nbsp;GC&nbsp;can't&nbsp;move&nbsp;it&nbsp;while&nbsp;native&nbsp;function&nbsp;is&nbsp;called</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;pin_ptr&lt;<span style="color: #0000FF; ">const</span>&nbsp;wchar_t&gt;&nbsp;wch&nbsp;=&nbsp;PtrToStringChars(str);<br />&nbsp;&nbsp;&nbsp;printf_s("%S\n",&nbsp;wch);<br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Conversion&nbsp;to&nbsp;char*&nbsp;:<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Can&nbsp;just&nbsp;convert&nbsp;wchar_t*&nbsp;to&nbsp;char*&nbsp;using&nbsp;one&nbsp;of&nbsp;the&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;conversion&nbsp;functions&nbsp;such&nbsp;as:&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;WideCharToMultiByte()<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;wcstombs_s()<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;etc</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;size_t&nbsp;convertedChars&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;sizeInBytes&nbsp;=&nbsp;((str-&gt;Length&nbsp;+&nbsp;1)&nbsp;*&nbsp;2);<br />&nbsp;&nbsp;&nbsp;errno_t&nbsp;err&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;&nbsp;&nbsp;*ch&nbsp;=&nbsp;(<span style="color: #0000FF; ">char</span>&nbsp;*)malloc(sizeInBytes);<br /><br />&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;wcstombs_s(&amp;convertedChars,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch,&nbsp;sizeInBytes,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wch,&nbsp;sizeInBytes);<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(err&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf_s("wcstombs_s&nbsp;&nbsp;failed!\n");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf_s("%s\n",&nbsp;ch);<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/212372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-12-01 11:08 <a href="http://www.cppblog.com/aaxron/archive/2015/12/01/212372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# using 三种使用方式</title><link>http://www.cppblog.com/aaxron/archive/2015/11/10/212234.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Tue, 10 Nov 2015 02:45:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/11/10/212234.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/212234.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/11/10/212234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/212234.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/212234.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 />-->C#&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;三种使用方式<br />1.using指令。<span style="color: #0000FF; ">using</span>&nbsp;+&nbsp;命名空间名字，这样可以在程序中直接用命令空间中的类型，而不必指定类型的详细命名空间，类似于Java的import，这个功能也是最常用的，几乎每个cs的程序都会用到。&nbsp;<br />例如：<span style="color: #0000FF; ">using</span>&nbsp;System;&nbsp;一般都会出现在*.cs中。<br /><br />2.using别名。<span style="color: #0000FF; ">using</span>&nbsp;+&nbsp;别名&nbsp;=&nbsp;包括详细命名空间信息的具体的类型。&nbsp;<br />这种做法有个好处就是当同一个cs引用了两个不同的命名空间，但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候，就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁，用到哪个类就给哪个类做别名声明就可以了。注意：并不是说两个名字重复，给其中一个用了别名，另外一个就不需要用别名了，如果两个都要使用，则两个都需要用using来定义别名的。<br /><span style="color: #0000FF; ">using</span>&nbsp;Row&nbsp;=&nbsp;Newtonsoft.Json.Linq.JObject;<br /><span style="color: #0000FF; ">using</span>&nbsp;Rows&nbsp;=&nbsp;Newtonsoft.Json.Linq.JArray;<br /><br />3.using语句，定义一个范围，在范围结束时处理对象。&nbsp;<br />场景：&nbsp;<br />当在某个代码段中使用了类的实例，而希望无论因为什么原因，只要离开了这个代码段就自动调用这个类实例的Dispose。&nbsp;<br />要达到这样的目的，用try<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />catch来捕捉异常也是可以的，但用using也很方便。<br /><br /><span style="color: #0000FF; ">using</span>&nbsp;(Class1&nbsp;cls1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Class1(),&nbsp;cls2&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Class1())<br />{<br />&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;the&nbsp;code&nbsp;using&nbsp;cls1,&nbsp;cls2</span><span style="color: #008000; "><br /></span>}&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;call</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/212234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-11-10 10:45 <a href="http://www.cppblog.com/aaxron/archive/2015/11/10/212234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL简单封装</title><link>http://www.cppblog.com/aaxron/archive/2015/07/30/211434.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 30 Jul 2015 11:59:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/07/30/211434.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/211434.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/07/30/211434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/211434.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/211434.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: #0000FF; ">using</span>&nbsp;System;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Collections.Generic;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.ComponentModel;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Data;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Drawing;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Linq;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Text;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Windows.Forms;<br /><span style="color: #0000FF; ">using</span>&nbsp;MySql.Data.MySqlClient;<br /><span style="color: #0000FF; ">using</span>&nbsp;System.Xml;<br /><span style="color: #0000FF; ">using</span>&nbsp;Row&nbsp;=&nbsp;System.Collections.Generic.Dictionary&lt;<span style="color: #0000FF; ">string</span>,&nbsp;<span style="color: #0000FF; ">string</span>&gt;;<br /><br /><span style="color: #0000FF; ">namespace</span>&nbsp;NeowayFixPlatform<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MysqlFunction<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;table_fix&nbsp;=&nbsp;"nw_fix_record";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;IsConnected()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(mysql.State&nbsp;==&nbsp;ConnectionState.Open);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;MysqlFunction()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(mysql.State&nbsp;!=&nbsp;ConnectionState.Open)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql.Open();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~MysqlFunction()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(mysql.State&nbsp;==&nbsp;ConnectionState.Open)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql.Dispose();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;mysqlcon&nbsp;=&nbsp;GetConfigString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlConnection&nbsp;mysql&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlConnection(mysqlcon);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;quote(<span style="color: #0000FF; ">ref</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;value.Replace(@"\",&nbsp;@"\\").Replace("'",&nbsp;@"\'");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;StringBuilder&nbsp;quote(<span style="color: #0000FF; ">ref</span>&nbsp;StringBuilder&nbsp;value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;value.Replace(@"\",&nbsp;@"\\").Replace("'",&nbsp;@"\'");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;StringBuilder&nbsp;GetPairSQLString(Row&nbsp;row)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;strSQL&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringBuilder();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">foreach</span>&nbsp;(KeyValuePair&lt;<span style="color: #0000FF; ">string</span>,&nbsp;<span style="color: #0000FF; ">string</span>&gt;&nbsp;pair&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;row)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;value&nbsp;=&nbsp;pair.Value.ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.quote(<span style="color: #0000FF; ">ref</span>&nbsp;value);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.AppendFormat("{0}='{1}',",&nbsp;pair.Key,&nbsp;value);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.Remove(strSQL.Length-1,&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;strSQL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;UpdateOne(<span style="color: #0000FF; ">string</span>&nbsp;table,Row&nbsp;row,<span style="color: #0000FF; ">string</span>&nbsp;format,<span style="color: #0000FF; ">params</span>&nbsp;<span style="color: #0000FF; ">object</span>[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;condition&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;condition.AppendFormat(format,&nbsp;args);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">this</span>.UpdateOne(table,&nbsp;row,&nbsp;condition.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;UpdateOne(<span style="color: #0000FF; ">string</span>&nbsp;strTable,&nbsp;Row&nbsp;row,&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;strQuery)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;strSQL&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.AppendFormat("UPDATE&nbsp;{0}&nbsp;set&nbsp;{1}&nbsp;WHERE&nbsp;{2}&nbsp;LIMIT&nbsp;1",&nbsp;strTable,&nbsp;GetPairSQLString(row),&nbsp;strQuery);<br />&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; ">mysql.Open();</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlCommand&nbsp;cmd&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlCommand(strSQL.ToString(),&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.ExecuteNonQuery();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Dispose();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(System.Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Row&nbsp;FetchOne(<span style="color: #0000FF; ">string</span>&nbsp;strSQL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Row&nbsp;row&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Row();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&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; ">mysql.Open();</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlCommand&nbsp;cmd&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlCommand(strSQL.ToString(),mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataReader&nbsp;reader&nbsp;=&nbsp;cmd.ExecuteReader();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.Read();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;reader.FieldCount;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(reader.HasRows)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row[reader.GetName(i)]&nbsp;=&nbsp;reader[i].ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Dispose();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(System.Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;row;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#region</span>&nbsp;获取登陆字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获取登陆字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;GetConfigString()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;spath&nbsp;=&nbsp;Application.StartupPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spath&nbsp;+=&nbsp;"\\config.xml";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlDocument&nbsp;xml&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;XmlDocument();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xml.Load(spath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNode&nbsp;config&nbsp;=&nbsp;xml.SelectSingleNode("config");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNode&nbsp;dbname&nbsp;=&nbsp;config.SelectSingleNode("dbname");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNode&nbsp;ipaddr&nbsp;=&nbsp;config.SelectSingleNode("ipaddr");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNode&nbsp;username&nbsp;=&nbsp;config.SelectSingleNode("username");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNode&nbsp;password&nbsp;=&nbsp;config.SelectSingleNode("password");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">string</span>.Format("database={0};Password={1};User&nbsp;ID={2};server={3}",&nbsp;dbname.InnerText,&nbsp;password.InnerText,&nbsp;username.InnerText,&nbsp;ipaddr.InnerText);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endregion</span><br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;BindData(<span style="color: #0000FF; ">string</span>&nbsp;sql,<span style="color: #0000FF; ">ref</span>&nbsp;DataGridView&nbsp;dgv)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;dataset&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;datatable&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataTable();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataAdapter&nbsp;mdap&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlDataAdapter(sql,&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdap.Fill(dataset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datatable&nbsp;=&nbsp;dataset.Tables[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dgv.DataSource&nbsp;=&nbsp;datatable;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#region</span>&nbsp;用户登录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;系统登录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;Login(cUserInfo&nbsp;userinfo)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;dataset&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;datatable&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataTable();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&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; ">MySqlDataAdapter&nbsp;数据库执行函数，查询，插入，删除都可使用</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataAdapter&nbsp;mdap&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlDataAdapter("select&nbsp;*&nbsp;from&nbsp;nw_user&nbsp;where&nbsp;user_name&nbsp;=&nbsp;'"&nbsp;+&nbsp;userinfo.User_name&nbsp;+&nbsp;"'&nbsp;and&nbsp;user_pwd&nbsp;=&nbsp;'"&nbsp;+&nbsp;userinfo.User_password&nbsp;+&nbsp;"'",&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdap.Fill(dataset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datatable&nbsp;=&nbsp;dataset.Tables[0];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(datatable.Rows.Count&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow&nbsp;datarow&nbsp;=&nbsp;datatable.Rows[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userinfo.User_power&nbsp;=&nbsp;datarow["user_power"].ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endregion</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;SaveFix(Dictionary&lt;<span style="color: #0000FF; ">string</span>,<span style="color: #0000FF; ">string</span>&gt;&nbsp;row,<span style="color: #0000FF; ">bool</span>&nbsp;bNew)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;strSQL&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bNew)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.Append("INSERT&nbsp;INTO&nbsp;nw_fix_record&nbsp;set&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.Append("UPDATE&nbsp;nw_fix_record&nbsp;set&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.AppendFormat("{0}",GetPairSQLString(row));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!bNew)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strSQL.AppendFormat("&nbsp;WHERE&nbsp;IMEI_MEID='{0}'&nbsp;limit&nbsp;1",&nbsp;row["IMEI_MEID"]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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; ">mysql.Open();</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlCommand&nbsp;cmd&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlCommand(strSQL.ToString(),&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.ExecuteNonQuery();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#region</span>&nbsp;获取所有产品型号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获取所有产品型号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>[]&nbsp;GetProducts()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;dataset&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;datatable&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataTable();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>[]&nbsp;rows&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataAdapter&nbsp;mdap&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlDataAdapter("select&nbsp;*&nbsp;from&nbsp;nw_product&nbsp;where&nbsp;1",&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdap.Fill(dataset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datatable&nbsp;=&nbsp;dataset.Tables[0];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;rows;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;row_count&nbsp;=&nbsp;datatable.Rows.Count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(row_count&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">string</span>[row_count];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;row_count;&nbsp;i++&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows[i]&nbsp;=&nbsp;datatable.Rows[i][0].ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;rows;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endregion</span><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#region</span>&nbsp;获取所有客户名称<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获取所有客户名称<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>[]&nbsp;GetAllClientName()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;dataset&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;datatable&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataTable();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>[]&nbsp;rows&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataAdapter&nbsp;mdap&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlDataAdapter("select&nbsp;client_name&nbsp;from&nbsp;nw_client&nbsp;where&nbsp;1",&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdap.Fill(dataset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datatable&nbsp;=&nbsp;dataset.Tables[0];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;rows;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;row_count&nbsp;=&nbsp;datatable.Rows.Count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(row_count&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">string</span>[row_count];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;row_count;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows[i]&nbsp;=&nbsp;datatable.Rows[i][0].ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;rows;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endregion</span><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#region</span>&nbsp;获取所有维修人员<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获取所有维修人员<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>[]&nbsp;GetAllRepairEr()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;dataset&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataSet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;datatable&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;DataTable();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>[]&nbsp;rows&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataAdapter&nbsp;mdap&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MySqlDataAdapter("select&nbsp;user_name&nbsp;from&nbsp;nw_user&nbsp;where&nbsp;user_power='维修员'&nbsp;order&nbsp;by&nbsp;user_id",&nbsp;mysql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mdap.Fill(dataset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datatable&nbsp;=&nbsp;dataset.Tables[0];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;rows;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;row_count&nbsp;=&nbsp;datatable.Rows.Count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(row_count&nbsp;&gt;&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">string</span>[row_count];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;row_count;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rows[i]&nbsp;=&nbsp;datatable.Rows[i][0].ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;rows;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endregion</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#region</span>&nbsp;定义用户表<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;cUserInfo<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;user_id;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;User_id<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">get</span>&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;user_id;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;{&nbsp;user_id&nbsp;=&nbsp;value;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;user_name;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;User_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">get</span>&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;user_name;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;{&nbsp;user_name&nbsp;=&nbsp;value;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;user_password;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;User_password<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">get</span>&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;user_password;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;{&nbsp;user_password&nbsp;=&nbsp;value;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;user_power;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;User_power<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">get</span>&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;user_power;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;{&nbsp;user_power&nbsp;=&nbsp;value;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">#endregion</span><br />&nbsp;&nbsp;&nbsp;<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/211434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-07-30 19:59 <a href="http://www.cppblog.com/aaxron/archive/2015/07/30/211434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杂记Json,MySQL,C#</title><link>http://www.cppblog.com/aaxron/archive/2015/07/06/211165.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 06 Jul 2015 11:37:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2015/07/06/211165.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/211165.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2015/07/06/211165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/211165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/211165.html</trackback:ping><description><![CDATA[<div><div><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 />-->MySQL&nbsp;1045权限错误&nbsp;的解决:<br />GRANT&nbsp;ALL&nbsp;PRIVILEGES&nbsp;ON&nbsp;*.*&nbsp;TO&nbsp;test_user@'%'&nbsp;IDENTIFIED&nbsp;BY&nbsp;'123456'&nbsp;WITH&nbsp;GRANT&nbsp;OPTION;<br /><br /><br />libJson(Jsoncpp),够用了.<br />C++:<br /><span style="color: #0000FF; ">extern</span>&nbsp;"C"&nbsp;LIB_MESCLIENT_API&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nw_save_prodmade_data(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;jo_in);<br /><br />Json::Value&nbsp;jo;<br />jo["row"]["product_id"]&nbsp;=&nbsp;"21265";&nbsp;<br />jo["row"]["product_sn"]&nbsp;=&nbsp;223456789012345678;&nbsp;<br /><span style="color: #0000FF; ">int</span>&nbsp;error_code&nbsp;=&nbsp;nw_save_prodmade_data(jo.toStyledString().c_str());<br /><br /><br />C#下用Newtonsoft.Json也挺好用的<br /><span style="color: #0000FF; ">using</span>&nbsp;Newtonsoft.Json.Linq;<br />JObject&nbsp;jo&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;JObject();<br />jo["row"]&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;JObject();<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">此部分在dll内部会插入到可追溯状态表&nbsp;nw_sn_status</span><span style="color: #008000; "><br /></span>jo["row"]["product_id"]&nbsp;=&nbsp;"12\r\n3\"12'\"65";&nbsp;//产品ID<br />StringBuilder&nbsp;row&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StringBuilder(jo.ToString());<br /><span style="color: #0000FF; ">int</span>&nbsp;error_code&nbsp;=&nbsp;nw_save_prodmade_data(row);</div></div><br /><br /></div></div><img src ="http://www.cppblog.com/aaxron/aggbug/211165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2015-07-06 19:37 <a href="http://www.cppblog.com/aaxron/archive/2015/07/06/211165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中结构体与字节流互相转换</title><link>http://www.cppblog.com/aaxron/archive/2012/09/20/191369.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 20 Sep 2012 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/09/20/191369.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/191369.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/09/20/191369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/191369.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/191369.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">一、c#结构体<br /><br /></span><span style="color: #000000">1</span><span style="color: #000000">、定义与C</span><span style="color: #000000">++</span><span style="color: #000000">对应的C#结构体<br /><br />在c#中的结构体不能定义指针，不能定义字符数组，只能在里面定义字符数组的引用。<br />C</span><span style="color: #000000">++</span><span style="color: #000000">的消息结构体如下：<br /></span><span style="color: #008000">//</span><span style="color: #008000">消息格式&nbsp;4+16+4+4=&nbsp;28个字节</span><span style="color: #008000"><br /></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;cs_message{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd_type;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;username[</span><span style="color: #000000">16</span><span style="color: #000000">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dstID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u32_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srcID;<br />};<br />C#定义的结构体如下:<br />[StructLayout(LayoutKind.Sequential,&nbsp;Pack&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;my_message<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UInt32&nbsp;&nbsp;cmd_type;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[MarshalAs(UnmanagedType.ByValTStr,&nbsp;SizeConst&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;username;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UInt32&nbsp;&nbsp;dstID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UInt32&nbsp;&nbsp;srcID;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;my_message(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd_type&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dstID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srcID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />在C</span><span style="color: #000000">++</span><span style="color: #000000">的头文件定义中，使用了&nbsp;#pragma&nbsp;pack&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;字节按1对齐，所以C#的结构体也必须要加上对应的特性，LayoutKind.Sequential属性让结构体在导出到非托管内存时按出现的顺序依次布局,而对于C</span><span style="color: #000000">++</span><span style="color: #000000">的char数组类型，C#中可以直接使用string来对应，当然了，也要加上封送的特性和长度限制。<br /></span><span style="color: #000000">2</span><span style="color: #000000">、结构体与byte[]的互相转换<br /><br />定义一个类，里面有2个方法去实现互转：<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Converter<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Byte[]&nbsp;StructToBytes(Object&nbsp;structure)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int32&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Marshal.SizeOf(structure);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Marshal.AllocHGlobal(size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshal.StructureToPtr(structure,&nbsp;buffer,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Byte[]&nbsp;bytes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Byte[size];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshal.Copy(buffer,&nbsp;bytes,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;bytes;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshal.FreeHGlobal(buffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;BytesToStruct(Byte[]&nbsp;bytes,&nbsp;Type&nbsp;strcutType)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int32&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Marshal.SizeOf(strcutType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Marshal.AllocHGlobal(size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshal.Copy(bytes,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;buffer,&nbsp;size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Marshal.PtrToStructure(buffer,&nbsp;strcutType);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshal.FreeHGlobal(buffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #000000">3</span><span style="color: #000000">、测试结果：<br /><br /></span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义转换类的一个对象并初始化</span><span style="color: #008000"><br /></span><span style="color: #000000">Converter&nbsp;Convert&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Converter();<br /></span><span style="color: #008000">//</span><span style="color: #008000">定义消息结构体</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;my_message&nbsp;m;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">初始化消息结构体</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;my_message(</span><span style="color: #000000">"</span><span style="color: #000000">yanlina</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;m.cmd_type&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1633837924</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;m.srcID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1633837924</span><span style="color: #000000">;<br />m.dstID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1633837924</span><span style="color: #000000">;<br />&nbsp;<br /></span><span style="color: #008000">//</span><span style="color: #008000">使用转换类的对象的StructToBytes方法把m结构体转换成Byte</span><span style="color: #008000"><br /></span><span style="color: #000000">Byte[]&nbsp;message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Convert.StructToBytes(m);<br /></span><span style="color: #008000">//</span><span style="color: #008000">使用转换类的对象的BytesToStruct方法把Byte转换成m结构体</span><span style="color: #008000"><br /></span><span style="color: #000000">my_message&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(my_message)Convert.BytesToStruct(message,&nbsp;m.GetType());<br /></span><span style="color: #008000">//</span><span style="color: #008000">输出测试</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(Encoding.ASCII.GetString(message));<br />&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(n.username);<br />}<br />结构体的size是28个字节和c</span><span style="color: #000000">++</span><span style="color: #000000">的结构体一样，同时可以将结构体和字节数组互转，方便UDP的发送和接收。</span></div>
<p><br />转自:<a href="http://blog.csdn.net/huxiangyang4/article/details/5853247">http://blog.csdn.net/huxiangyang4/article/details/5853247</a></p><img src ="http://www.cppblog.com/aaxron/aggbug/191369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-09-20 11:37 <a href="http://www.cppblog.com/aaxron/archive/2012/09/20/191369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#委派Delegate </title><link>http://www.cppblog.com/aaxron/archive/2012/06/07/177941.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 07 Jun 2012 08:41:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2012/06/07/177941.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/177941.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2012/06/07/177941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/177941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/177941.html</trackback:ping><description><![CDATA[<div>1:
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000">//</span><span style="color: #008000">直接上MSDN上的C#代码:</span><span style="color: #008000"><br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SamplesDelegate<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Declares&nbsp;a&nbsp;delegate&nbsp;for&nbsp;a&nbsp;method&nbsp;that&nbsp;takes&nbsp;in&nbsp;an&nbsp;int&nbsp;and&nbsp;returns&nbsp;a&nbsp;String.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;String&nbsp;myMethodDelegate(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;myInt);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Defines&nbsp;some&nbsp;methods&nbsp;to&nbsp;which&nbsp;the&nbsp;delegate&nbsp;can&nbsp;point.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;mySampleClass<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Defines&nbsp;an&nbsp;instance&nbsp;method.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;myStringMethod(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;myInt)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(myInt&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">positive</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(myInt&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">negative</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">zero</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Defines&nbsp;a&nbsp;static&nbsp;method.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;mySignMethod(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;myInt)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(myInt&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(myInt&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">"</span><span style="color: #000000">-</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">""</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Creates&nbsp;one&nbsp;delegate&nbsp;for&nbsp;each&nbsp;method.&nbsp;For&nbsp;the&nbsp;instance&nbsp;method,&nbsp;an<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;instance&nbsp;(mySC)&nbsp;must&nbsp;be&nbsp;supplied.&nbsp;For&nbsp;the&nbsp;static&nbsp;method,&nbsp;use&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;class&nbsp;name.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mySampleClass&nbsp;mySC&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;mySampleClass();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myMethodDelegate&nbsp;myD1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;myMethodDelegate(mySC.myStringMethod);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myMethodDelegate&nbsp;myD2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;myMethodDelegate(mySampleClass.mySignMethod);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Invokes&nbsp;the&nbsp;delegates.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">{0}&nbsp;is&nbsp;{1};&nbsp;use&nbsp;the&nbsp;sign&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">{</span><span style="color: #000000">2</span><span style="color: #000000">}\</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;myD1(</span><span style="color: #000000">5</span><span style="color: #000000">),&nbsp;myD2(</span><span style="color: #000000">5</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">{0}&nbsp;is&nbsp;{1};&nbsp;use&nbsp;the&nbsp;sign&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">{</span><span style="color: #000000">2</span><span style="color: #000000">}\</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">3</span><span style="color: #000000">,&nbsp;myD1(</span><span style="color: #000000">-</span><span style="color: #000000">3</span><span style="color: #000000">),&nbsp;myD2(</span><span style="color: #000000">-</span><span style="color: #000000">3</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000">"</span><span style="color: #000000">{0}&nbsp;is&nbsp;{1};&nbsp;use&nbsp;the&nbsp;sign&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">{</span><span style="color: #000000">2</span><span style="color: #000000">}\</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;myD1(</span><span style="color: #000000">0</span><span style="color: #000000">),&nbsp;myD2(</span><span style="color: #000000">0</span><span style="color: #000000">));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /></span></div><br /><br />2:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000">//</span><span style="color: #008000">&nbsp;d11.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br /></span><span style="color: #008000">//</span><span style="color: #008000">C++代码</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><br />typedef&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;myMethodDelegate(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;myInt);<br /><br /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;myStringMethod&nbsp;(&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;myInt&nbsp;)&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;myInt&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">positive</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;myInt&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">negative</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">zero</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br />}<br /><br /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;mySignMethod&nbsp;(&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;myInt&nbsp;)&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;myInt&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;myInt&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">(&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">&nbsp;);<br />}<br /><br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;myMethodDelegate</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;myD1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;myStringMethod;<br />&nbsp;&nbsp;&nbsp;&nbsp;myMethodDelegate</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;myD2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mySignMethod;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Invokes&nbsp;the&nbsp;delegates.</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">{%d}&nbsp;is&nbsp;{%s};&nbsp;use&nbsp;the&nbsp;sign&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">{</span><span style="color: #000000">%</span><span style="color: #000000">s}\</span><span style="color: #000000">"</span><span style="color: #000000">.&nbsp;\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;myD1(&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">&nbsp;).c_str(),&nbsp;myD2(&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">&nbsp;).c_str()&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">{%d}&nbsp;is&nbsp;{%s};&nbsp;use&nbsp;the&nbsp;sign&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">{</span><span style="color: #000000">%</span><span style="color: #000000">s}\</span><span style="color: #000000">"</span><span style="color: #000000">.&nbsp;\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">3</span><span style="color: #000000">,&nbsp;myD1(&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;).c_str(),&nbsp;myD2(&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;).c_str()&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">{%d}&nbsp;is&nbsp;{%s};&nbsp;use&nbsp;the&nbsp;sign&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">{</span><span style="color: #000000">%</span><span style="color: #000000">s}\</span><span style="color: #000000">"</span><span style="color: #000000">.\r\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;myD1(&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;).c_str(),&nbsp;myD2(&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;).c_str()&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />}<br /><br /></span></div><br /><br /><br /><br /><br /><br /></div> <img src ="http://www.cppblog.com/aaxron/aggbug/177941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2012-06-07 16:41 <a href="http://www.cppblog.com/aaxron/archive/2012/06/07/177941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>