<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Emaer's Blog]]></title>
<link>http://www.emaer.com/</link>
<description><![CDATA[创造机会的人是勇者；等待机会的人是愚者]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[emaer@qq.com(Emaer)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>Emaer&#39;s Blog</title>
	<url>http://www.emaer.com/images/logos.gif</url>
	<link>http://www.emaer.com/</link>
	<description>Emaer&#39;s Blog</description>
</image>

			<item>
			<link>http://www.emaer.com/article/3/62.htm</link>
			<title><![CDATA[Lua脚本编辑器(可直接运行Lua 脚本)]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[个人日志]]></category>
			<pubDate>Thu,19 Aug 2010 14:32:23 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=62</guid>
		<description><![CDATA[<p>最近有个项目需要一个脚本编辑器,选了Lua作为脚本语言,正好在写了个,</p>
<p>目前功能还是很简单,还没有调试功能,还有很多路要走,</p>
<p>暂时对初学者应该还是有帮助的.</p>
<p><img alt="" src="http://www.emaer.com/download.asp?id=1" /></p>
<p>下载地址:<a href="http://www.emaer.com/download.asp?id=2"><img border="0" alt="" style="margin: 0px 2px -4px 0px" src="http://www.emaer.com/images/download.gif" />点击下载此文件</a></p>
<p>内置Lua解释器,所以可以直接运行lua脚本<br />
目前还在开发阶段问题不少,<br />
请试用的朋友提些改进意见.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.emaer.com/mailto:emaer@qq.com (QQ:26368119">emaer@qq.com (QQ:26368119</a>)</p>
<p>13:25 2010/8/19<br />
修改了require(&quot;xxx&quot;)中相对路径问题</p>
<p>9:12 2010/8/3<br />
修改了函数列表刷新问题</p>]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/2/61.htm</link>
			<title><![CDATA[C++完美实现Singleton模式]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[技术文摘]]></category>
			<pubDate>Fri,23 Jul 2010 09:59:14 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=61</guid>
		<description><![CDATA[<p>1. 意图<br />
&nbsp; 保证一个类仅有一个实例，并提供一个访问它的全局访问点。<br />
2. 动机<br />
&nbsp; 对一些类来说，只有一个实例是很重要的。虽然系统中可以有许多打印机，但却只应该有一个打印假脱机（ printer spooler），只应该有一个文件系统和一个窗口管理器。一个数字滤波器只能有一个A / D转换器。一个会计系统只能专用于一个公司。<br />
&nbsp; 我们怎么样才能保证一个类只有一个实例并且这个实例易于被访问呢？一个全局变量使得一个对象可以被访问，但它不能防止你实例化多个对象。一个更好的办法是，让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建（通过截取创建新对象的请求），并且它可以提供一个访问该实例的方法。这就是Singleton模式。<br />
3. 适用性<br />
&nbsp; 在下面的情况下可以使用Singleton模式. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 当这个唯一实例应该是通过子类化可扩展的，并且客户应该无需更改代码就能使用一个扩展的实例时。<br />
4. 结构<br />
5. 参与者<br />
&nbsp; Singleton<br />
&nbsp; 定义一个GetInstance操作，允许客户访问它的唯一实例。GetInstance是一个类操作（即Smalltalk中的一个类方法和C++中的一个静态成员函数）。可能负责创建它自己的唯一实例。<br />
6. 协作<br />
&nbsp; 客户只能通过Singleton的GetInstance操作访问一个Singleton的实例。<br />
7. 效果<br />
&nbsp; Singleton模式有许多优点：<br />
&nbsp; 1) 对唯一实例的受控访问因为Singleton类封装它的唯一实例，所以它可以严格的控制客户怎样以及何时访问它。<br />
&nbsp; 2) 缩小名空间Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。<br />
&nbsp; 3) 允许对操作和表示的精化Singleton类可以有子类，而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。<br />
&nbsp; 4) 允许可变数目的实例这个模式使得你易于改变你的想法，并允许Singleton类的多个实例。此外，你可以用相同的方法来控制应用所使用的实例的数目。只有允许访问Singleton实例的操作需要改变。<br />
&nbsp; 5) 比类操作更灵活另一种封装单件功能的方式是使用类操作（即C++中的静态成员函数或者是Smalltalk中的类方法）。但这两种语言技术都难以改变设计以允许一个类有多个实例。<br />
&nbsp; 此外，C++中的静态成员函数不是虚函数，因此子类不能多态的重定义它们。<br />
8. 实现<br />
class Singleton<br />
{<br />
&nbsp; static std::auto_ptr&lt;Singleton&gt; m_pInstance;<br />
protected:<br />
&nbsp; //prevent user making our any instance by manually<br />
&nbsp; //构造函数是保护类型的。<br />
&nbsp; Singleton(){}<br />
public:<br />
&nbsp; ~Singleton(){}<br />
&nbsp; //Return this singleton class' instance pointer<br />
&nbsp; static Singleton* Instance()<br />
&nbsp; {<br />
&nbsp; if(!m_pInstance.get())<br />
&nbsp; {<br />
&nbsp; m_pInstance = std::auto_ptr&lt;Singleton&gt;(new Singleton());<br />
&nbsp; }<br />
&nbsp; return m_pInstance.get();<br />
&nbsp; }<br />
&nbsp;};<br />
<br />
&nbsp; 怎样来使用它呢？不要试图从这个类派生你的单件子类，那样的结果是不妥当的，如果你需要多个单件子类，还是使用下面的宏定义更为妥当：<br />
#define DEFINE_SINGLETON(cls)\<br />
&nbsp;private:\<br />
&nbsp; static std::auto_ptr&lt;cls&gt; m_pInstance;\<br />
&nbsp;protected:\<br />
&nbsp; cls(){}\<br />
&nbsp;public:\<br />
&nbsp; ~cls(){}\<br />
&nbsp; static cls* Instance(){\<br />
&nbsp; if(!m_pInstance.get()){\<br />
&nbsp; m_pInstance = std::auto_ptr&lt;cls&gt;(new cls());\<br />
&nbsp; }\<br />
&nbsp; return m_pInstance.get();\<br />
&nbsp;}<br />
#define IMPLEMENT_SINGLETON(cls) \<br />
std::auto_ptr&lt;cls&gt; cls::m_pInstance(NULL);<br />
<br />
假定你需要实现一个单件类YY，这样书写：<br />
class YY&nbsp; <br />
{<br />
&nbsp; DEFINE_SINGLETON(YY);<br />
public:<br />
&nbsp; //your interfaces here...<br />
};<br />
在cpp文件中，书写：<br />
IMPLEMENT_SINGLETON(YY);<br />
需要引入这个类的实例的时候，使用这样的语句：<br />
YY* pYY = YY::Instance();<br />
这，就是全部。<br />
如果需要定义其他的单件类，重复上面的定义，就可以了。<br />
&nbsp; 当想集中管理一个应用程序所需的所有配置时，可以声明一个CToolsOptions的类，其中包含配置属性集合。对于这个类的实例，显然是一个实例就够了；当编写绘图程序时，考虑绘制矩形，圆形等分别使用CGraphTool派生的工具类，每个派生类负责处理具体的绘制动作和相关的UI相应逻辑。这些工具类典型的在被用户选择工具栏的图元按钮时被选中。依照这种模式，你应该对所有的图元工具从事注册工作，使得绘图程序了解运行时刻可以使用那些图元工具。同样的，负责管理注册信息的这个管理器也只需要一个实例就行了。</p>
<div class="msgfont">
<dl class="code">
    <dt>C/C++ code </dt>
    <dd>
    <pre><div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #000000">C</span><span style="color: #000000">++</span><span style="color: #000000">完美实现Singleton模式 
Singleton模式是常用的设计模式之一，但是要实现一个真正实用的设计模式却也不是件容易的事情。

</span><span style="color: #800080">1</span><span style="color: #000000">.         标准的实现

</span><span style="color: #0000ff">class</span><span style="color: #000000"> Singleton

{

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> Singleton </span><span style="color: #000000">*</span><span style="color: #000000"> Instance()

       {

              </span><span style="color: #0000ff">if</span><span style="color: #000000">( </span><span style="color: #800080">0</span><span style="color: #000000">==</span><span style="color: #000000"> _instance)

              {

                     _instance </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Singleton;

              }

              </span><span style="color: #0000ff">return</span><span style="color: #000000"> _instance;

       }

</span><span style="color: #0000ff">protected</span><span style="color: #000000">:

       Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">)

       {

       }

       </span><span style="color: #0000ff">virtual</span><span style="color: #000000"> </span><span style="color: #000000">~</span><span style="color: #000000">Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">)

       {

       }

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> Singleton</span><span style="color: #000000">*</span><span style="color: #000000"> _instance;

};

       这是教科书上使用的方法。看起来没有什么问题，其实包含很多的问题。下面我们一个一个的解决。

</span><span style="color: #800080">2</span><span style="color: #000000">.         自动垃圾回收

上面的程序必须记住在程序结束的时候，释放内存。为了让它自动的释放内存，我们引入auto_ptr改变它。

#include </span><span style="color: #000000">&lt;</span><span style="color: #000000">memory</span><span style="color: #000000">&gt;</span><span style="color: #000000">

#include </span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> std;

</span><span style="color: #0000ff">class</span><span style="color: #000000"> Singleton

{

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> Singleton </span><span style="color: #000000">*</span><span style="color: #000000"> Instance()

       {

              </span><span style="color: #0000ff">if</span><span style="color: #000000">( </span><span style="color: #800080">0</span><span style="color: #000000">==</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">())

              {

                     _instance.reset( </span><span style="color: #0000ff">new</span><span style="color: #000000"> Singleton);

              }

              </span><span style="color: #0000ff">return</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">();

       }

</span><span style="color: #0000ff">protected</span><span style="color: #000000">:

       Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">)

       {

              cout </span><span style="color: #000000">&lt;&lt;</span><span style="color: #800000">&quot;</span><span style="color: #800000">Create Singleton</span><span style="color: #800000">&quot;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;

       }

       </span><span style="color: #0000ff">virtual</span><span style="color: #000000"> </span><span style="color: #000000">~</span><span style="color: #000000">Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">)

       {

              cout </span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000"> </span><span style="color: #800000">&quot;</span><span style="color: #800000">Destroy Singleton</span><span style="color: #800000">&quot;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;

       }

       friend </span><span style="color: #0000ff">class</span><span style="color: #000000"> auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">Singleton</span><span style="color: #000000">&gt;</span><span style="color: #000000">;

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">Singleton</span><span style="color: #000000">&gt;</span><span style="color: #000000"> _instance;

};

</span><span style="color: #008000">//</span><span style="color: #008000">Singleton.cpp</span><span style="color: #000000">
auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">Singleton</span><span style="color: #000000">&gt;</span><span style="color: #000000"> Singleton::_instance;

</span><span style="color: #800080">3</span><span style="color: #000000">.         增加模板

在我的一个工程中，有多个的Singleton类，对Singleton类，我都要实现上面这一切，这让我觉得烦死了。于是我想到了模板来完成这些重复的工作。

现在我们要添加本文中最吸引人单件实现：

</span><span style="color: #008000">/*</span><span style="color: #008000">*******************************************************************

    (c) 2003-2005 C2217 Studio

    Module:    Singleton.h

    Author:     Yangjun D.

    Created:    9/3/2005   23:17

    Purpose:    Implement singleton pattern

    History:

********************************************************************</span><span style="color: #008000">*/</span><span style="color: #0000ff">#pragma</span><span style="color: #000000"> once</span><span style="color: #000000">

 

#include </span><span style="color: #000000">&lt;</span><span style="color: #000000">memory</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> std;

</span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> C2217::Win32;

 

</span><span style="color: #0000ff">namespace</span><span style="color: #000000"> C2217

{

</span><span style="color: #0000ff">namespace</span><span style="color: #000000"> Pattern 

{

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> Singleton

{

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> inline T</span><span style="color: #000000">*</span><span style="color: #000000"> instance();

       

</span><span style="color: #0000ff">private</span><span style="color: #000000">:

       Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">){}

       </span><span style="color: #000000">~</span><span style="color: #000000">Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">){}

       Singleton(</span><span style="color: #0000ff">const</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&amp;</span><span style="color: #000000">){}

       Singleton </span><span style="color: #000000">&amp;</span><span style="color: #000000"> </span><span style="color: #0000ff">operator</span><span style="color: #000000">=</span><span style="color: #000000"> (</span><span style="color: #0000ff">const</span><span style="color: #000000"> Singleton </span><span style="color: #000000">&amp;</span><span style="color: #000000">){}

 

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000"> _instance;

};

 

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">

auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::_instance;

 

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">

 inline T</span><span style="color: #000000">*</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::instance()

{

       </span><span style="color: #0000ff">if</span><span style="color: #000000">( </span><span style="color: #800080">0</span><span style="color: #000000">==</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">())

       {

              _instance.reset ( </span><span style="color: #0000ff">new</span><span style="color: #000000"> T);

       }

       

       </span><span style="color: #0000ff">return</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">();

}

 

</span><span style="color: #008000">//</span><span style="color: #008000">Class that will implement the singleton mode, 

</span><span style="color: #008000">//</span><span style="color: #008000">must use the macro in it's delare file</span><span style="color: #0000ff">#define</span><span style="color: #000000"> DECLARE_SINGLETON_CLASS( type ) \</span><span style="color: #000000">

       friend </span><span style="color: #0000ff">class</span><span style="color: #000000"> auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000"> type </span><span style="color: #000000">&gt;</span><span style="color: #000000">;\

       friend </span><span style="color: #0000ff">class</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000"> type </span><span style="color: #000000">&gt;</span><span style="color: #000000">;

}

}

 

</span><span style="color: #800080">4</span><span style="color: #000000">.         线程安全

上面的程序可以适应单线程的程序。但是如果把它用到多线程的程序就会发生问题。主要的问题在于同时执行_instance.reset ( </span><span style="color: #0000ff">new</span><span style="color: #000000"> T); 就会同时产生两个新的对象，然后马上释放一个，这跟Singleton模式的本意不符。所以，你需要更加安全的版本：

</span><span style="color: #008000">/*</span><span style="color: #008000">*******************************************************************

    (c) 2003-2005 C2217 Studio

    Module:    Singleton.h

    Author:     Yangjun D.

    Created:    9/3/2005   23:17

    Purpose:    Implement singleton pattern

    History:

********************************************************************</span><span style="color: #008000">*/</span><span style="color: #0000ff">#pragma</span><span style="color: #000000"> once</span><span style="color: #000000">

 

#include </span><span style="color: #000000">&lt;</span><span style="color: #000000">memory</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> std;

#include </span><span style="color: #800000">&quot;</span><span style="color: #800000">Interlocked.h</span><span style="color: #800000">&quot;</span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> C2217::Win32;

 

</span><span style="color: #0000ff">namespace</span><span style="color: #000000"> C2217

{

</span><span style="color: #0000ff">namespace</span><span style="color: #000000"> Pattern 

{

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> Singleton

{

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> inline T</span><span style="color: #000000">*</span><span style="color: #000000"> instance();

       

</span><span style="color: #0000ff">private</span><span style="color: #000000">:

       Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">){}

       </span><span style="color: #000000">~</span><span style="color: #000000">Singleton(</span><span style="color: #0000ff">void</span><span style="color: #000000">){}

       Singleton(</span><span style="color: #0000ff">const</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&amp;</span><span style="color: #000000">){}

       Singleton </span><span style="color: #000000">&amp;</span><span style="color: #000000"> </span><span style="color: #0000ff">operator</span><span style="color: #000000">=</span><span style="color: #000000"> (</span><span style="color: #0000ff">const</span><span style="color: #000000"> Singleton </span><span style="color: #000000">&amp;</span><span style="color: #000000">){}

 

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000"> _instance;

       </span><span style="color: #0000ff">static</span><span style="color: #000000"> CResGuard _rs; 

};

 

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">

auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::_instance;

 

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">

CResGuard Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::_rs; 

 

template </span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">

 inline T</span><span style="color: #000000">*</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::instance()

{

       </span><span style="color: #0000ff">if</span><span style="color: #000000">( </span><span style="color: #800080">0</span><span style="color: #000000"> </span><span style="color: #000000">==</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">() )

       {

              CResGuard::CGuard gd(_rs);

              </span><span style="color: #0000ff">if</span><span style="color: #000000">( </span><span style="color: #800080">0</span><span style="color: #000000">==</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">())

              {

                     _instance.reset ( </span><span style="color: #0000ff">new</span><span style="color: #000000"> T);

              }

       }

       </span><span style="color: #0000ff">return</span><span style="color: #000000"> _instance.</span><span style="color: #0000ff">get</span><span style="color: #000000">();

}

 

</span><span style="color: #008000">//</span><span style="color: #008000">Class that will implement the singleton mode, 

</span><span style="color: #008000">//</span><span style="color: #008000">must use the macro in it's delare file</span><span style="color: #0000ff">#define</span><span style="color: #000000"> DECLARE_SINGLETON_CLASS( type ) \</span><span style="color: #000000">

       friend </span><span style="color: #0000ff">class</span><span style="color: #000000"> auto_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000"> type </span><span style="color: #000000">&gt;</span><span style="color: #000000">;\

       friend </span><span style="color: #0000ff">class</span><span style="color: #000000"> Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000"> type </span><span style="color: #000000">&gt;</span><span style="color: #000000">;

}

}

       CresGuard 类主要的功能是线程访问同步,代码如下：

</span><span style="color: #008000">/*</span><span style="color: #008000">*****************************************************************************

Module:  Interlocked.h

Notices: Copyright (c) 2000 Jeffrey Richter

*****************************************************************************</span><span style="color: #008000">*/</span><span style="color: #000000">

 

 

</span><span style="color: #0000ff">#pragma</span><span style="color: #000000"> once</span><span style="color: #808080">//////////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">/</span><span style="color: #000000">
 

</span><span style="color: #008000">//</span><span style="color: #008000"> Instances of this class will be accessed by multiple threads. So, 

</span><span style="color: #008000">//</span><span style="color: #008000"> all members of this class (except the constructor and destructor) 

</span><span style="color: #008000">//</span><span style="color: #008000"> must be thread-safe.</span><span style="color: #0000ff">class</span><span style="color: #000000"> CResGuard {

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

   CResGuard()  { m_lGrdCnt </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">; InitializeCriticalSection(</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_cs); }

   </span><span style="color: #000000">~</span><span style="color: #000000">CResGuard() { DeleteCriticalSection(</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_cs); }

 

   </span><span style="color: #008000">//</span><span style="color: #008000"> IsGuarded is used for debugging</span><span style="color: #000000">
   BOOL IsGuarded() </span><span style="color: #0000ff">const</span><span style="color: #000000"> { </span><span style="color: #0000ff">return</span><span style="color: #000000">(m_lGrdCnt </span><span style="color: #000000">&gt;</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">); }

 

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

   </span><span style="color: #0000ff">class</span><span style="color: #000000"> CGuard {

   </span><span style="color: #0000ff">public</span><span style="color: #000000">:

      CGuard(CResGuard</span><span style="color: #000000">&amp;</span><span style="color: #000000"> rg) : m_rg(rg) { m_rg.Guard(); };

      </span><span style="color: #000000">~</span><span style="color: #000000">CGuard() { m_rg.Unguard(); }

 

   </span><span style="color: #0000ff">private</span><span style="color: #000000">:

      CResGuard</span><span style="color: #000000">&amp;</span><span style="color: #000000"> m_rg;

   };

 

</span><span style="color: #0000ff">private</span><span style="color: #000000">:

   </span><span style="color: #0000ff">void</span><span style="color: #000000"> Guard()   { EnterCriticalSection(</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_cs); m_lGrdCnt</span><span style="color: #000000">++</span><span style="color: #000000">; }

   </span><span style="color: #0000ff">void</span><span style="color: #000000"> Unguard() { m_lGrdCnt</span><span style="color: #000000">--</span><span style="color: #000000">; LeaveCriticalSection(</span><span style="color: #000000">&amp;</span><span style="color: #000000">m_cs); }

 

   </span><span style="color: #008000">//</span><span style="color: #008000"> Guard/Unguard can only be accessed by the nested CGuard class.</span><span style="color: #000000">
   friend </span><span style="color: #0000ff">class</span><span style="color: #000000"> CResGuard::CGuard;

 

</span><span style="color: #0000ff">private</span><span style="color: #000000">:

   CRITICAL_SECTION m_cs;

   </span><span style="color: #0000ff">long</span><span style="color: #000000"> m_lGrdCnt;   </span><span style="color: #008000">//</span><span style="color: #008000"> # of EnterCriticalSection calls</span><span style="color: #000000">
};

 

 

</span><span style="color: #808080">//////////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">/</span><span style="color: #800080">5</span><span style="color: #000000">.         实用方法

比如你有一个需要实现单件模式的类，就应该这样实现：

</span><span style="color: #0000ff">#pragma</span><span style="color: #000000"> once</span><span style="color: #000000">

#include </span><span style="color: #800000">&quot;</span><span style="color: #800000">singleton.h</span><span style="color: #800000">&quot;</span><span style="color: #0000ff">using</span><span style="color: #000000"> </span><span style="color: #0000ff">namespace</span><span style="color: #000000"> C2217::Pattern;

 

</span><span style="color: #0000ff">class</span><span style="color: #000000"> ServiceManger

{

</span><span style="color: #0000ff">public</span><span style="color: #000000">:

       </span><span style="color: #0000ff">void</span><span style="color: #000000"> Run()

       {

       }

</span><span style="color: #0000ff">private</span><span style="color: #000000">:

       ServiceManger(</span><span style="color: #0000ff">void</span><span style="color: #000000">)

       {

       }

       </span><span style="color: #0000ff">virtual</span><span style="color: #000000"> </span><span style="color: #000000">~</span><span style="color: #000000">ServiceManger(</span><span style="color: #0000ff">void</span><span style="color: #000000">)

       {

       }

       DECLARE_SINGLETON_CLASS(ServiceManger);

};

 

typedef Singleton</span><span style="color: #000000">&lt;</span><span style="color: #000000">ServiceManger</span><span style="color: #000000">&gt;</span><span style="color: #000000"> SSManger;

 

在使用的时候很简单，跟一般的Singleton实现的方法没有什么不同。

</span><span style="color: #0000ff">int</span><span style="color: #000000"> _tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000"> argc, _TCHAR</span><span style="color: #000000">*</span><span style="color: #000000"> argv[])

{

        SSManger::instance()</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Run();

}

 

一个简单的Singleton模式的实现，可以看到C</span><span style="color: #000000">++</span><span style="color: #000000">语言背后隐藏的丰富的语意，我希望有人能实现一个更好的Singleton让大家学习。我从一开始实现Singleton类的过程，其实就是我学习C</span><span style="color: #000000">++</span><span style="color: #000000">的过程，越是深入越觉得C</span><span style="color: #000000">++</span><span style="color: #000000">了不起。

 


</span></div>
</pre>
    </dd>
</dl>
单件模式<br />
<dl class="code">
    <dt>C/C++ code </dt>
    <dd>
    <pre><div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><span style="color: #000000">
#include </span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000">
#include </span><span style="color: #000000">&lt;</span><span style="color: #000000">stdarg.h</span><span style="color: #000000">&gt;</span><span style="color: #008000">//</span><span style="color: #008000"> 工厂类，生产单件</span><span style="color: #000000">template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> Factory{
    </span><span style="color: #0000ff">static</span><span style="color: #000000"> T</span><span style="color: #000000">*</span><span style="color: #000000"> p_;
</span><span style="color: #0000ff">public</span><span style="color: #000000">:
    Factory() : p_(</span><span style="color: #800080">0</span><span style="color: #000000">){}
    </span><span style="color: #0000ff">static</span><span style="color: #000000"> T</span><span style="color: #000000">&amp;</span><span style="color: #000000"> GetSingleObject(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">, ...);
};

</span><span style="color: #008000">//</span><span style="color: #008000"> 初始化单件无绑定对象</span><span style="color: #000000">template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">
T</span><span style="color: #000000">*</span><span style="color: #000000"> Factory</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::p_ </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">;

</span><span style="color: #008000">//</span><span style="color: #008000"> 获得默认构造的单件，若单件已构造，则不会改变其内容</span><span style="color: #000000">template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">class</span><span style="color: #000000"> T</span><span style="color: #000000">&gt;</span><span style="color: #000000">
T</span><span style="color: #000000">&amp;</span><span style="color: #000000"> Factory</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">::GetSingleObject(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i, ...)
{
    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">p_)
    {
        p_ </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> T();
    }
    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">p_;
}

</span><span style="color: #008000">//</span><span style="color: #008000"> 测试对象，必须将Factory::GetSingleObject(int i, ...)声明为友元</span><span style="color: #0000ff">class</span><span style="color: #000000"> Single{
    </span><span style="color: #0000ff">int</span><span style="color: #000000"> value_;

    friend Single</span><span style="color: #000000">&amp;</span><span style="color: #000000"> Factory</span><span style="color: #000000">&lt;</span><span style="color: #000000">Single</span><span style="color: #000000">&gt;</span><span style="color: #000000">::GetSingleObject(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i, ...);
    </span><span style="color: #0000ff">explicit</span><span style="color: #000000"> Single(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">) : value_(i){}

</span><span style="color: #0000ff">public</span><span style="color: #000000">:
    </span><span style="color: #0000ff">operator</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000">() </span><span style="color: #0000ff">const</span><span style="color: #000000">
    {
        </span><span style="color: #0000ff">return</span><span style="color: #000000"> value_;
    }
};

</span><span style="color: #008000">//</span><span style="color: #008000"> 特化测试类型的工厂的获得单件函数，第一个参数作为选择测试类型的构造函数的重载选项
</span><span style="color: #008000">//</span><span style="color: #008000"> 0为默认构造，1为整型实参构造，等等
</span><span style="color: #008000">//</span><span style="color: #008000"> 若单件已构造，则不会改变其内容</span><span style="color: #000000"> template</span><span style="color: #000000">&lt;&gt;</span><span style="color: #000000"> Single</span><span style="color: #000000">&amp;</span><span style="color: #000000"> Factory</span><span style="color: #000000">&lt;</span><span style="color: #000000">Single</span><span style="color: #000000">&gt;</span><span style="color: #000000">::GetSingleObject(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i, ...)
{
    va_list ar;
    va_start(ar, i);
    </span><span style="color: #0000ff">if</span><span style="color: #000000"> (</span><span style="color: #000000">!</span><span style="color: #000000">p_)
    {
        </span><span style="color: #0000ff">switch</span><span style="color: #000000"> (i)
        {
        </span><span style="color: #0000ff">case</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">:
            p_ </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Single();
            </span><span style="color: #0000ff">break</span><span style="color: #000000">;
        </span><span style="color: #0000ff">case</span><span style="color: #000000"> </span><span style="color: #800080">1</span><span style="color: #000000">:
            p_ </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Single(va_arg(ar, </span><span style="color: #0000ff">int</span><span style="color: #000000">));
        }
    }
    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">*</span><span style="color: #000000">p_;
}

</span><span style="color: #008000">//</span><span style="color: #008000"> 测试入口</span><span style="color: #0000ff">int</span><span style="color: #000000"> main()
{
    </span><span style="color: #008000">//</span><span style="color: #008000"> 使用Single的带整型实参的构造函数获得单件Single对象。</span><span style="color: #000000">    Single</span><span style="color: #000000">&amp;</span><span style="color: #000000"> test </span><span style="color: #000000">=</span><span style="color: #000000"> Factory</span><span style="color: #000000">&lt;</span><span style="color: #000000">Single</span><span style="color: #000000">&gt;</span><span style="color: #000000">::GetSingleObject(</span><span style="color: #800080">1</span><span style="color: #000000">, </span><span style="color: #800080">2</span><span style="color: #000000">);
    std::cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">test</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">std::endl;
    system(</span><span style="color: #800000">&quot;</span><span style="color: #800000">pause</span><span style="color: #800000">&quot;</span><span style="color: #000000">);
    </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">;
}

</span></div>
</pre>
    </dd>
</dl>
</div>
<!--End_rbody_57660217//-->]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/2/59.htm</link>
			<title><![CDATA[WM获取GPS数据]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[技术文摘]]></category>
			<pubDate>Tue,08 Jun 2010 23:15:21 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=59</guid>
		<description><![CDATA[<p><strong><font color="#444444"><font face="Comic Sans MS"><font size="3">带</font><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS</span></span></font></font><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">功能</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">的</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">Windows Mobile</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">手机</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">定位可以通过</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">获取</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">手机所在的详细地址，民用一般误差在</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">5</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">米到</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">50</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">米之间的范围内。通过使用</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPSApi</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">头</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">文件</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">中包含的一下四个</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">函数</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">，由</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">中层驱动</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">程序</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">(GPSID)</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">提供，可以通过它使用</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">设备并实时更</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">新手</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">机所在位置的信息。注意包含</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS</span></span><span class="ttag"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">API</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">.h</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">头文件与</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPAAPI.lib</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">静态链接库。（在做gps方面开始时可以参照sdk的几个Demo）</span></span></strong><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><br />
<strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;">GPSOpenDevice</span><br />
<span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;">GPSGetPosition</span><br />
<span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;">GPSGetDeviceState</span><br />
<span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;">GPSCloseDevice</span><br />
<br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp; 一、下面分别介绍各个函数的功能，参数以及具体怎样实现使用这些函数。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><br />
<br />
<span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>&nbsp;&nbsp; &nbsp; 1.GPS_POSITION</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>结构</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><br />
</span><strong><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">&nbsp;&nbsp; 在介绍各个函数之前，要先介绍</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS_POSITION</span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">数据</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">结构，他用来存放</span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">GPS</span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt">定位所需要的各种信息。</span></span></strong><span><br />
</span></p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>typedef&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>struct</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;_GPS_POSITION&nbsp;{<br />
&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwVersion;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>GPSID的版本号，在调用GPSGetPosition之前赋值，暂时必须被赋值为GPS_VERSION_1</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwSize;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>GPS_POSITION结构的大小，同样应先用sizeof给它赋值</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwValidFields;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>&nbsp;结构实例中的有效空间标记，标记结构中哪些值有效</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFlags;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>在调用GPSGetPosition函数时修改过的数据的状态</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;SYSTEMTIME&nbsp;stUTCTime;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>根据GPS卫星提供的信息获得的宇宙时间</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>double</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;dblLatitude;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>纬度,单位&rdquo;度&rdquo;，正数表示北</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>double</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;dblLongitude;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>经度,单位&rdquo;度&rdquo;，正数表示东</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;flSpeed;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>移动速度，单位&ldquo;KNOTS&rdquo;（海里）,估计是海里/小时</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;flHeading;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>移动方向,单位&ldquo;度&rdquo;，数值为偏北往顺时针的度数</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>double</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;dblMagneticVariation;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>正北与地磁北极角度差,整数表示往东的度数</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;flAltitudeWRTSeaLevel;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>距海平面高度</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;flAltitudeWRTEllipsoid;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>距椭球面高度</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;GPS_FIX_QUALITY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FixQuality;<br />
&nbsp;&nbsp;&nbsp;GPS_FIX_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FixType;<br />
&nbsp;&nbsp;&nbsp;GPS_FIX_SelectION&nbsp;&nbsp;&nbsp;SelectionType;<br />
&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;flPositionDilutionOfPrecision;<br />
&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;flHorizontalDilutionOfPrecision;<br />
&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>float</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;flVerticalDilutionOfPrecision;<br />
<br />
&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwSatelliteCount;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>获取以上信息使用到的卫星数量</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;DWORD&nbsp;rgdwSatellitesUsedPRNs[GPS_MAX_SATELLITES];<br />
<br />
&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwSatellitesInView;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>GPS硬件设备可见范围内的卫星数量</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;DWORD&nbsp;rgdwSatellitesInViewPRNs[GPS_MAX_SATELLITES];<br />
&nbsp;&nbsp;&nbsp;DWORD&nbsp;rgdwSatellitesInViewElevation[GPS_MAX_SATELLITES];<br />
&nbsp;&nbsp;&nbsp;DWORD&nbsp;rgdwSatellitesInViewAzimuth[GPS_MAX_SATELLITES];<br />
&nbsp;&nbsp;&nbsp;DWORD&nbsp;rgdwSatellitesInViewSignalToNoiseRatio[GPS_MAX_SATELLITES];<br />
}&nbsp;GPS_POSITION,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>*</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>PGPS_POSITION;</strong></span></div>
</div>
<p>&nbsp;</p>
<p><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp; &nbsp;通过以上可以知道，要获取</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>定位信息，必须定位一个</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS_POSITION</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>变量保存其信息，且在使用</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPSGetPosition</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>函数前要将其前两个参数分别赋好值。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
<br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>&nbsp;&nbsp; &nbsp; &nbsp;2.GpsOpenDevice</strong></span><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp; &nbsp;函数原型如下：</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp; &nbsp;函数功能：建立程序同</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>中间驱动的连接，获得句柄。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp; &nbsp;前两个参数为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>HANDLE</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>型，都通过</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>CreateEvent</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>的返回值给它们赋值。如：</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>1</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp; &nbsp; HANDLE&nbsp; &nbsp;&nbsp; &nbsp; hNewLocationData &nbsp;</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>CreateEvent</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>生成的句柄或者为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>NULL</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>当有新的</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>定位信息时，这个事件被</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>中间驱动</strong></span></span><span class="ttag"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设置</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>为信号态。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>2</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp; &nbsp; HANDLE&nbsp; &nbsp;&nbsp; &nbsp; hDeviceStateChange &nbsp;</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>CreateEvent</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>生成的句柄或者为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>NULL</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>当</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设备位置发生改变时，驱动将其设置为信号态。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>3</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：必须为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>NULL</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>4</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：必须为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>0</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>返回值：成功则返回</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>中间驱动句柄。失败则为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>NULL</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
<br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>&nbsp;&nbsp; &nbsp; &nbsp;3.GPSGetPosition</strong></span><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>1</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>HANDLE &nbsp; hGPSDevice &nbsp;</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设备句柄。</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPSOpenDevice</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>函数打开的设备句柄。</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>这个参数可以为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>NULL</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>，此时函数不会启动</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设备。</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>但函数会返回其他程序调用</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>驱动后保留的数据。</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>这个数据满足</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>dwMaximumAge</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设置的时间值。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>2</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS_POSITION *pGPSPosition &nbsp;</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>GPS_POSITION</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>结构指针。函数将填充这个结构。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><span class="ttag" style="font-family: &quot;Comic Sans MS&quot;"><strong>用户</strong></span><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>必须输入结构版本和大小参数值。</strong></span> </span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>4</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp; &nbsp; DWORD&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;dwFlags &nbsp;</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>保留值为</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>0</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>返回值：成功：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>ERROR_SUCCESS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp;</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>失败：错误信息。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>GPSGetDeviceState</strong></span><strong><br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>DWORD GPSGetDeviceState(</strong></span><strong><br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>&nbsp;&nbsp;GPS_DEVICE *pGPSDevice</strong></span><strong><br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>);</strong></span><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>函数功能：获取</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>硬件设备的当前状态信息。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS_DEVICE *pGPSDevice </strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS_DEVICE</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>结构体指针。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>返回值：成功：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>ERROR_SUCCESS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp;</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>错误：错误编号。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
<br />
</strong><span class="apple-style-span" style="font-family: &quot;Comic Sans MS&quot;"><strong>&nbsp;&nbsp; &nbsp; &nbsp;4.GPSCloseDevice</strong></span><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>函数功能：关闭</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设备句柄。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>HANDLE hGPSDevice</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPSOpenDevice</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>打开的</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>设备句柄。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>返回值：成功：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>ERROR_SUCCESS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>。</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong>&nbsp;&nbsp;</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>错误：错误信息。</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
<br />
<br />
</strong></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>二、</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>具体实现细节</strong></span></span><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong><br />
</strong></span>
<p>&nbsp;</p>
</p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>HANDLE&nbsp;GPSOpenDevice(<br />
&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hNewLocationData,<br />
&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hDeviceStateChange,<br />
&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>const</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;WCHAR&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>*</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>szDeviceName,<br />
&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwFlags<br />
);</strong></span></div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>HANDLE&nbsp;s_hNewLocationData&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;CreateEvent(NULL,&nbsp;FALSE,&nbsp;FALSE,&nbsp;NULL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
HANDLE&nbsp;s_hDeviceStateChange&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;CreateEvent(NULL,&nbsp;FALSE,&nbsp;FALSE,&nbsp;NULL);&nbsp;&nbsp;&nbsp;</strong></span></div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>DWORD&nbsp;GPSGetPosition(<br />
&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hGPSDevice,<br />
&nbsp;&nbsp;GPS_POSITION&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>*</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>pGPSPosition,<br />
&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwMaximumAge,<br />
&nbsp;&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwFlags<br />
);</strong></span></div>
</div>
<p>&nbsp;</p>
<p><strong style="font-family: &quot;Comic Sans MS&quot;">函数功能：返回本地位置信息。</strong></p>
<p>&nbsp;</p>
<p><span class="Apple-style-span" style="font-family: verdana; color: #000000; font-size: 14px"><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>第</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>3</strong></span></span><span class="apple-style-span"><span style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>个参数：</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Comic Sans MS&quot;; color: #444444; font-size: 11.5pt"><strong>DWORD &nbsp; dwMaximumAge&nbsp;</strong><span class="Apple-style-span" style="font-family: verdana; color: #000000; font-size: 14px"><span class="apple-style-span"><span style="font-family: 宋体; color: #444444; font-size: 11.5pt; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana"><strong>规定了本地</strong></span></span><span class="apple-style-span"><span lang="EN-US" style="font-family: &quot;Verdana&quot;, &quot;sans-serif&quot;; color: #444444; font-size: 11.5pt"><strong>GPS</strong></span></span><span class="apple-style-span"><span style="font-family: 宋体; color: #444444; font-size: 11.5pt; mso-ascii-font-family: Verdana; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Verdana"><strong>信息的最长有效期。在有效期内可以使用这个数据。</strong></span></span></span></span></span></span></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>DWORD&nbsp;GPSCloseDevice(<br />
&nbsp;&nbsp;HANDLE&nbsp;hGPSDevice<br />
);</strong></span></div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>1</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&gt;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;首先用CreateEvent生成3个接受消息的句柄，两个上述以说明，第三个用来接受置关闭GPS设备结束线程<br />
HANDLE&nbsp;s_hExitThread&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;CreateEvent(NULL,&nbsp;FALSE,&nbsp;FALSE,&nbsp;NULL);<br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>2</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&gt;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;打开GPS设备并声明线程函数<br />
HANDLE&nbsp;s_hGPS_Device&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPSOpenDevice(s_hNewLocationData,&nbsp;s_hDeviceStateChange,&nbsp;NULL,&nbsp;NULL);<br />
DWORD&nbsp;&nbsp;GPSThreadProc(__opt&nbsp;LPVOID&nbsp;lpParameter);<br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>3</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&gt;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;定义线程函数<br />
DWORD&nbsp;&nbsp;GPSThreadProc(__opt&nbsp;LPVOID&nbsp;lpParameter)<br />
{&nbsp;<br />
GPS_POSITION&nbsp;gps_Position&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;{</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>不用说了，放数据的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwRet&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>表状态的，具体状态干具体的事</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPS_DEVICE&nbsp;gps_Device&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;{</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>存放GPS设备信息，在GPSGetDeviceState前要赋值，如下</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>HANDLE&nbsp;gpsHandles[GPS_CONTROLLER_EVENT_COUNT]&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;{s_hNewLocationData,&nbsp;s_hDeviceStateChange,&nbsp;s_hExitThread&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gps_Position.dwSize&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>sizeof</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>(gps_Position);&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>POSITION结构的第一个参数</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gps_Position.dwVersion&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPS_VERSION_1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>POSITION结构的第二个参数</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gps_Device.dwVersion&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPS_VERSION_1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>DEVICE结构的第二个参数</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gps_Device.dwSize&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>sizeof</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>(gps_Device);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>DEVICE结构的第一个参数</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>while</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;(</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>1</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>循环获取</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&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;dwRet&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;WaitForMultipleObjects(GPS_CONTROLLER_EVENT_COUNT,&nbsp;gpsHandles,&nbsp;FALSE,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>100</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>);&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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>switch</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>(dwRet)<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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>case</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;WAIT_OBJECT_0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>有数据,获取并输出</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwRet&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPSGetPosition(s_hGPS_Device,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&amp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>gps_Position,&nbsp;MAX_AGE&nbsp;,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>break</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>case</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;WAIT_OBJECT_0&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>+</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>1</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>设备状态变化,获取状态信息</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwRet&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPSGetDeviceState(</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&amp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>gps_Device);&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;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&amp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>gps_Device,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>sizeof</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>(gps_Device));&nbsp;<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;gps_Device.dwVersion&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPS_VERSION_1;&nbsp;<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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>if</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;(ERROR_SUCCESS&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>==</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;dwRet)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>状态获取成功,则获取定位信息</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwRet&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;GPSGetPosition(s_hGPS_Device,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&amp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>gps_Position,&nbsp;MAX_AGE&nbsp;,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>break</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>case</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;WAIT_OBJECT_0&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>+</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>2</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>结束线程事件，关闭GPS设备</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSCloseDevice(s_hGPS_Device);<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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>return</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>1</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>default</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>:&nbsp;<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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>break</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>;<br />
&nbsp;&nbsp;&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;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>获取间断时间</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(MAX_WAIT);&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>return</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>;<br />
}<br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>4</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&gt;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;_tmain函数<br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>int</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;_tmain(</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>int</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;argc,&nbsp;_TCHAR</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>*</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;argv[])<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;m_dwThreadID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>创建线程</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;m_hThread&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>=</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&nbsp;CreateThread(NULL,&nbsp;NULL,&nbsp;GPSThreadProc,&nbsp;NULL,&nbsp;NULL,&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>&amp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #000000"><strong>m_dwThreadID);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPSThreadProc(NULL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>//</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #008000"><strong>运行线程</strong></span><span style="color: #008000"><strong><br />
</strong></span><span style="color: #000000"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #0000ff"><strong>return</strong></span><span style="color: #000000"><strong>&nbsp;</strong></span><span style="font-family: &quot;Comic Sans MS&quot;; color: #800080"><strong>0</strong></span><span style="color: #000000"><strong>;<br />
}</strong></span></div>
</div>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/2/58.htm</link>
			<title><![CDATA[使用CryptoAPI解析X509证书和P12证书]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[技术文摘]]></category>
			<pubDate>Mon,10 May 2010 08:24:13 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=58</guid>
		<description><![CDATA[<p><br />
<!-- google_ad_section_start  --><b>一、解析X509证书</b><br />
&nbsp;<br />
<b>1.从磁盘上的证书文件中读取证书数据</b><br />
unsigned&nbsp;char*&nbsp;pbX509Data;&nbsp;//&nbsp;证书数据<br />
unsigned&nbsp;long&nbsp;ulX509DataLen;&nbsp;//&nbsp;证书数据长度<br />
&nbsp;<br />
<b>2.获取CertContext</b><br />
PCCERT_CONTEXT&nbsp;pCertContext&nbsp;=&nbsp;<font color="#0000ff">CertCreateCertificateContext</font>(X509_ASN_ENCODING,&nbsp;pbX509Data,&nbsp;ulX509DataLen);<br />
&nbsp;<br />
<b>3.获取证书信息</b><br />
pCertContext-&gt;pCertInfo-&gt;dwVersion;&nbsp;//&nbsp;证书版本号<br />
CRYPT_INTEGER_BLOB&nbsp;snBlob&nbsp;=&nbsp;pCertContext-&gt;pCertInfo-&gt;SerialNumber;&nbsp;//&nbsp;证书SN<br />
CERT_NAME_BLOB&nbsp;issuerBlob&nbsp;=&nbsp;pCertContext-&gt;pCertInfo-&gt;Issuer;&nbsp;//&nbsp;证书颁发者<br />
CERT_NAME_BLOB&nbsp;subjectBlob&nbsp;=&nbsp;pCertContext-&gt;pCertInfo-&gt;Subject;&nbsp;//&nbsp;证书主题<br />
//&nbsp;证书有效起始日期<br />
SYSTEMTIME&nbsp;sysTime;<br />
memset(&amp;sysTime,&nbsp;0,&nbsp;sizeof(sysTime));<br />
<font color="#0000ff">FileTimeToSystemTime</font>(&amp;pCertContext-&gt;pCertInfo-&gt;NotBefore,&nbsp;&amp;sysTime);<br />
char&nbsp;szTime[128]&nbsp;=&nbsp;{0};<br />
sprintf_s(szTime,&nbsp;128,&nbsp;&quot;%d年%d月%d日&nbsp;%d:%d:%d&quot;,&nbsp;sysTime.wYear,&nbsp;sysTime.wMonth,&nbsp;sysTime.wDay,&nbsp;sysTime.wHour,&nbsp;sysTime.wMinute,&nbsp;sysTime.wSecond);<br />
//&nbsp;证书有效终止日期<br />
memset(&amp;sysTime,&nbsp;0,&nbsp;sizeof(sysTime));<br />
<font color="#0000ff">FileTimeToSystemTime</font>(&amp;pCertContext-&gt;pCertInfo-&gt;NotAfter,&nbsp;&amp;sysTime);<br />
memset(szTime,&nbsp;0,&nbsp;sizeof(szTime));<br />
sprintf_s(szTime,&nbsp;128,&nbsp;&quot;%d年%d月%d日&nbsp;%d:%d:%d&quot;,&nbsp;sysTime.wYear,&nbsp;sysTime.wMonth,&nbsp;sysTime.wDay,&nbsp;sysTime.wHour,&nbsp;sysTime.wMinute,&nbsp;sysTime.wSecond);<br />
&nbsp;<br />
<b>4.创建临时密钥容器</b><br />
HCRYPTPROV&nbsp;hTmpProv&nbsp;=&nbsp;NULL;<br />
if&nbsp;(RCRYPT_FAILED(<font color="#0000ff">CryptAcquireContext</font>(&amp;hTmpProv,&nbsp;&quot;My_Temporary_Container&quot;,&nbsp;NULL,&nbsp;PROV_RSA_AES,&nbsp;CRYPT_NEWKEYSET)))&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;NULL表示使用系统默认CSP<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(RCRYPT_FAILED(<font color="#0000ff">CryptAcquireContext</font>(&amp;hTmpProv,&nbsp;&quot;My_Temporary_Container&quot;,&nbsp;NULL,&nbsp;PROV_RSA_AES,&nbsp;0)))&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;NULL表示使用系统默认CSP<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CertFreeCertificateContext(pCertContext);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NTE_FAIL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
&nbsp;<br />
<b>5.向容器中导入公钥，获取公钥句柄</b><br />
HCRYPTKEY&nbsp;hKey&nbsp;=&nbsp;NULL;<br />
CERT_PUBLIC_KEY_INFO&nbsp;certPubKeyInfo&nbsp;=&nbsp;pCertContext-&gt;pCertInfo-&gt;SubjectPublicKeyInfo;<br />
<font color="#0000ff">CryptImportPublicKeyInfo</font>(hTmpProv,&nbsp;X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,&nbsp;&amp;certPubKeyInfo,&nbsp;&amp;hKey);<br />
&nbsp;<br />
<b>6.导出公钥（最好采用二次调用方式）</b><br />
unsigned&nbsp;char*&nbsp;pBuf&nbsp;=&nbsp;NULL;<br />
unsigned&nbsp;long&nbsp;ulBufLen&nbsp;=&nbsp;0;<br />
<font color="#0000ff">CryptExportKey</font>(hKey,&nbsp;0,&nbsp;PUBLICKEYBLOB,&nbsp;0,&nbsp;pBuf,&nbsp;&amp;ulBufLen);<br />
pBuf&nbsp;=&nbsp;new&nbsp;unsigned&nbsp;char[ulBufLen];<br />
memset(pBuf,&nbsp;0,&nbsp;ulBufLen);<br />
<font color="#0000ff">CryptExportKey</font>(hKey,&nbsp;0,&nbsp;PUBLICKEYBLOB,&nbsp;0,&nbsp;pBuf,&nbsp;&amp;ulBufLen);<br />
&nbsp;<br />
<b>7.获取公钥信息</b><br />
unsigned&nbsp;char*&nbsp;p&nbsp;=&nbsp;pBuf&nbsp;+&nbsp;sizeof(PUBLICKEYSTRUC);<br />
(*(RSAPUBKEY*)p).bitlen;&nbsp;//&nbsp;公钥模长（以bit为单位）<br />
(*(RSAPUBKEY*)p).pubexp;&nbsp;//&nbsp;公钥的e（注意字节顺序）<br />
p&nbsp;+=&nbsp;sizeof(RSAPUBKEY);&nbsp;//&nbsp;公钥的n（注意字节顺序）<br />
&nbsp;<br />
<b>8.清理工作</b><br />
delete[]&nbsp;pBuf;<br />
pBuf&nbsp;=&nbsp;NULL;<br />
<font color="#0000ff">CryptDestroyKey</font>(hKey);<br />
<font color="#0000ff">CryptReleaseContext</font>(hTmpProv,&nbsp;0);<br />
<font color="#0000ff">CertFreeCertificateContext</font>(pCertContext);<br />
&nbsp;<br />
<b>二、解析P12证书</b><br />
&nbsp;<br />
<b>1.从磁盘上的证书文件中读取证书数据</b><br />
unsigned&nbsp;char*&nbsp;pbP12Data;&nbsp;//&nbsp;证书数据<br />
unsigned&nbsp;long&nbsp;ulP12DataLen;&nbsp;//&nbsp;证书数据长度<br />
&nbsp;<br />
<b>2.让用户输入证书密码</b><br />
char*&nbsp;szPwd;&nbsp;//&nbsp;证书密码<br />
&nbsp;<br />
<b>3.将证书密码转换成UNICODE格式（最好采用二次调用方式）</b><br />
LPWSTR&nbsp;pWideChar&nbsp;=&nbsp;NULL;<br />
int&nbsp;nWideChar&nbsp;=&nbsp;0;<br />
nWideChar&nbsp;=&nbsp;<font color="#0000ff">MultiByteToWideChar</font>(CP_ACP,&nbsp;0,&nbsp;szPwd,&nbsp;-1,&nbsp;pWideChar,&nbsp;nWideChar);<br />
pWideChar&nbsp;=&nbsp;new&nbsp;WCHAR[nWideChar];<br />
memset(pWideChar,&nbsp;0,&nbsp;sizeof(WCHAR)*nWideChar);<br />
<font color="#0000ff">MultiByteToWideChar</font>(CP_ACP,&nbsp;0,&nbsp;szPwd,&nbsp;-1,&nbsp;pWideChar,&nbsp;nWideChar);<br />
&nbsp;<br />
<b>4.将证书数据导入临时store</b><br />
CRYPT_DATA_BLOB&nbsp;blob;<br />
memset(&amp;blob,&nbsp;0,&nbsp;sizeof(blob));<br />
blob.pbData&nbsp;=&nbsp;pbP12Data;<br />
blob.cbData&nbsp;=&nbsp;ulP12DataLen;<br />
HCERTSTORE&nbsp;hCertStore&nbsp;=&nbsp;NULL;<br />
hCertStore&nbsp;=&nbsp;<font color="#0000ff">PFXImportCertStore</font>(&amp;blob,&nbsp;pWideChar,&nbsp;CRYPT_EXPORTABLE);<br />
&nbsp;<br />
<b>5.在store中查找证书，获取CertContext</b><br />
PCCERT_CONTEXT&nbsp;pCertContext&nbsp;=&nbsp;<font color="#0000ff">CertFindCertificateInStore</font>(hCertStore,&nbsp;X509_ASN_ENCODING|PKCS_7_ASN_ENCODING,&nbsp;0,&nbsp;CERT_FIND_ANY,&nbsp;NULL,&nbsp;NULL);<br />
&nbsp;<br />
<b>6.获取证书信息</b><br />
CRYPT_INTEGER_BLOB&nbsp;snBlob&nbsp;=&nbsp;pCertContext-&gt;pCertInfo-&gt;SerialNumber;&nbsp;//&nbsp;证书SN<br />
pCertContext-&gt;pbCertEncoded;&nbsp;//&nbsp;X509格式证书数据<br />
pCertContext-&gt;cbCertEncoded;&nbsp;//&nbsp;X509格式证书数据长度<br />
&nbsp;<br />
<b>7.获取CSP句柄</b><br />
HCRYPTPROV&nbsp;hProv&nbsp;=&nbsp;NULL;<br />
DWORD&nbsp;dwKeySpec&nbsp;=&nbsp;0;<br />
BOOL&nbsp;bCallerFreeProv&nbsp;=&nbsp;FALSE;<br />
<font color="#0000ff">CryptAcquireCertificatePrivateKey</font>(pCertContext,&nbsp;0,&nbsp;NULL,&nbsp;&amp;hProv,&nbsp;&amp;dwKeySpec,&nbsp;&amp;bCallerFreeProv);<br />
&nbsp;<br />
<b>8.获取密钥句柄</b><br />
HCRYPTKEY&nbsp;hKey&nbsp;=&nbsp;NULL;<br />
<font color="#0000ff">CryptGetUserKey</font>(hProv,&nbsp;dwKeySpec,&nbsp;&amp;hKey);<br />
&nbsp;<br />
<b>9.导出私钥（最好采用二次调用方式）</b><br />
BYTE*&nbsp;pbData&nbsp;=&nbsp;NULL;<br />
DWORD&nbsp;dwDataLen&nbsp;=&nbsp;0;<br />
<font color="#0000ff">CryptExportKey</font>(hKey,&nbsp;NULL,&nbsp;PRIVATEKEYBLOB,&nbsp;0,&nbsp;pbData,&nbsp;&amp;dwDataLen);<br />
pbData&nbsp;=&nbsp;new&nbsp;BYTE[dwDataLen];<br />
memset(pbData,&nbsp;0,&nbsp;dwDataLen);<br />
<font color="#0000ff">CryptExportKey</font>(hKey,&nbsp;NULL,&nbsp;PRIVATEKEYBLOB,&nbsp;0,&nbsp;pbData,&nbsp;&amp;dwDataLen);<br />
&nbsp;<br />
<b>10.获取公私钥信息</b><br />
BYTE&nbsp;*p&nbsp;=&nbsp;pbData+&nbsp;sizeof(PUBLICKEYSTRUC);&nbsp;<br />
(*(RSAPUBKEY*)p).bitlen;&nbsp;//&nbsp;公私钥模长（以bit为单位）<br />
(*(RSAPUBKEY*)p).pubexp;&nbsp;//&nbsp;公钥的e（注意字节顺序）<br />
p&nbsp;+=&nbsp;sizeof(RSAPUBKEY);&nbsp;//&nbsp;公私钥的n（注意字节顺序）<br />
p&nbsp;+=&nbsp;((*(RSAPUBKEY*)p).bitlen)/8;&nbsp;//&nbsp;私钥的p（注意字节顺序）<br />
p&nbsp;+=&nbsp;((*(RSAPUBKEY*)p).bitlen)/16;&nbsp;//&nbsp;私钥的q（注意字节顺序）<br />
p&nbsp;+=&nbsp;((*(RSAPUBKEY*)p).bitlen)/16;&nbsp;//&nbsp;私钥的dp（注意字节顺序）<br />
p&nbsp;+=&nbsp;((*(RSAPUBKEY*)p).bitlen)/16;&nbsp;//&nbsp;私钥的dq（注意字节顺序）<br />
p&nbsp;+=&nbsp;((*(RSAPUBKEY*)p).bitlen)/16;&nbsp;//&nbsp;私钥的qu（注意字节顺序）<br />
p&nbsp;+=&nbsp;((*(RSAPUBKEY*)p).bitlen)/16;&nbsp;//&nbsp;私钥的d（注意字节顺序）<br />
&nbsp;<br />
<b>11.清理工作</b><br />
delete[]&nbsp;pbData;<br />
pbData&nbsp;=&nbsp;NULL;<br />
<font color="#0000ff">CryptDestroyKey</font>(hKey);<br />
<font color="#0000ff">CryptReleaseContext</font>(hProv,&nbsp;0);<br />
<font color="#0000ff">CertFreeCertificateContext(</font>pCertContext);<br />
<font color="#0000ff">CertCloseStore</font>(hCertStore,&nbsp;CERT_CLOSE_STORE_FORCE_FLAG);<br />
delete[]&nbsp;pWideChar;<br />
pWideChar&nbsp;=&nbsp;NULL;<br />
&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/3/55.htm</link>
			<title><![CDATA[联通3G - WCDMA 小用]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[个人日志]]></category>
			<pubDate>Tue,16 Mar 2010 13:23:37 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=55</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实在是受不了蹭网这种既不文明又受制于人的行为了,一狠心买了张1200块钱包年每月3G流量的WCDMA资费卡(实际花费799,也就是每一个月66.6元),熬到16号开卡(省了48块钱的半个月费用)凌晨3点上线测试,用的是沃达丰的 GX1020 内置PCMCIA接口卡 连接速度 7.2M.随便百度个mp3 下载速度150K 左右徘徊,还算可以 估计迅雷速度会快些,小测了20分钟,上床睡觉..<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 上午上班继续测试发现这个内置卡貌似对Win7支持不太好,跟老板交涉了下,全额退款且回去的邮费由老板出呵呵,真是个好老板啊. 重新选了个国内华为的E180V网卡,这个卡可是HSDPA/HSUPA的,应该够未来几年用的了.店主下午就发货了,明天应该就到了,到时候再继续发个使用感受.<br/><br/>总结:3G国内已经开通有些时日了.总算搭个小车赶上移动互联小游了下,效果蛮好,比ADSL方便,对于我们这样白天上班晚上回家的人来说,选流量套餐貌似是一个非常好的选择,需要下载的都在单位下了.在家需要的流量反而很少.比限时好处是,挂着QQ出去兜一圈不用担心时间溜走而期间产生的流量却非常少.<br/><br/>还有点值得肯定的是,联通在你每次下线的时候会发来一条你已使用流量和剩余费用的短信,很人性化,不用每次自己查询了.<br/><br/>正在等待破解程序解开手机卡的KI,NND已经解了2天了 解出了2个7组的还没出结果,继续等吧,谁叫现在技术越来越先进呢,等解开了写入我的魔卡以后就不用再开关手机换卡上网或者打电话了. 为了方便 继续等待 等待等待,,白了头了啊 ,郁闷!!!!!!焦躁!!!!!!!!!接近崩溃!!!!!!!!更接近了点点.........]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/1/54.htm</link>
			<title><![CDATA[C++ like format for std::string]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[信手拈来]]></category>
			<pubDate>Mon,15 Mar 2010 15:24:53 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=54</guid>
		<description><![CDATA[From: <a href="http://www.szabster.net/2009/05/02/c-like-format-for-stdstring/" target="_blank" rel="external">http://www.szabster.net/2009/05/02/c-like-format-for-stdstring/</a><br/><br/>#include &lt;cstdarg&gt;<br/><br/>#define BUFF_SIZE 4096<br/>string format( const string &amp;msg, ... )<br/>{<br/>va_list ap;<br/>char text[BUFF_SIZE] = {0,};<br/><br/>va_start(ap, msg);<br/>vsnprintf(text, BUFF_SIZE, msg.c_str(), ap);<br/>va_end(ap);<br/><br/>return string( text );<br/>}<br/><br/><br/>e.g.<br/>cout&lt;&lt;format(string(&#34;%s hello&#34;) + string(&#34; world %d&#34;),&#34;this is&#34;,13)&lt;&lt;endl;<br/><br/>---8&lt;--------8&lt;--------8&lt;--------8&lt;--------8&lt;--------8&lt;--------8&lt;--------<br/>#include&nbsp;&nbsp; &lt;string&gt;&nbsp;&nbsp;<br/>#include&nbsp;&nbsp; &lt;cstdarg&gt;&nbsp;&nbsp;<br/><br/>std::string&nbsp;&nbsp; format(const&nbsp;&nbsp; std::string&amp;&nbsp;&nbsp; fmt,&nbsp;&nbsp; ...)&nbsp;&nbsp;<br/>{&nbsp;&nbsp;<br/>va_list&nbsp;&nbsp; argptr;&nbsp;&nbsp;<br/>va_start(argptr,&nbsp;&nbsp; fmt);&nbsp;&nbsp;<br/>int&nbsp;&nbsp; bufsize&nbsp;&nbsp; =&nbsp;&nbsp; _vsnprintf(NULL,&nbsp;&nbsp; 0,&nbsp;&nbsp; fmt.c_str(),&nbsp;&nbsp; argptr)&nbsp;&nbsp; +&nbsp;&nbsp; 2;&nbsp;&nbsp;<br/>char*&nbsp;&nbsp; buf&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; char[bufsize];&nbsp;&nbsp;<br/>_vsnprintf(buf,&nbsp;&nbsp; bufsize,&nbsp;&nbsp; fmt.c_str(),&nbsp;&nbsp; argptr);&nbsp;&nbsp;<br/>string&nbsp;&nbsp; s(buf);&nbsp;&nbsp;<br/>del&#101;te[]&nbsp;&nbsp; buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>va_end(argptr);&nbsp;&nbsp;&nbsp;&nbsp;<br/>return&nbsp;&nbsp; s;&nbsp;&nbsp;<br/>}<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/1/53.htm</link>
			<title><![CDATA[一个不错的16进制文本到数字的转换]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[信手拈来]]></category>
			<pubDate>Mon,15 Mar 2010 15:23:25 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=53</guid>
		<description><![CDATA[#include &lt;windows.h&gt;<br/>#include &lt;stdio.h&gt;<br/><br/>///////////////////////////////////////////////////////////////////////////////<br/>// hex to asc: 0x22 -&gt; &#34;22&#34;<br/>int Hex2Asc(char *Dest,char *Src,int SrcLen)<br/>{<br/>int i;<br/>for ( i = 0; i &lt; SrcLen; i ++ )<br/>{<br/>sprintf(Dest + i * 2,&#34;%02X&#34;,(unsigned char)Src[i]);<br/>}<br/>Dest[i * 2] = 0;<br/>return TRUE;<br/>}<br/><br/>///////////////////////////////////////////////////////////////////////////////<br/>// asc to hex: &#34;22&#34; -&gt; 0x22<br/>int Asc2Hex(char *Dest,char *Src,int SrcLen)<br/>{<br/>int i;<br/>for ( i = 0; i &lt; SrcLen / 2; i ++ )<br/>{<br/>sscanf(Src + i * 2,&#34;%02X&#34;,(unsigned char *)&amp;Dest[i]);<br/>}<br/>return TRUE;<br/>}<br/><br/><br/>void write_str (FILE *f, char *line)<br/>{<br/>char szHex[1024] = {0};<br/>int len = strlen (line);<br/><br/>Asc2Hex (szHex, line, len);<br/><br/>fwrite (szHex, 1, len/2, f);<br/>}<br/><br/>int main(int argc, char* argv[])<br/>{<br/>//<br/>char szfile[] = &#34;E:\\KuGou\\os\\img2.txt&#34;;<br/>char szimg[] = &#34;E:\\KuGou\\os\\img2.bmp&#34;;<br/>char line[1024];<br/><br/><br/>FILE *f = fopen (szfile, &#34;r&#34;);<br/>FILE *f2 = fopen (szimg, &#34;wb&#34;);<br/><br/>while (!feof(f))<br/>{<br/>fscanf(f, &#34;%s&#34;, line);<br/>write_str (f2, line);<br/>}<br/><br/>fclose (f);<br/>fclose (f2);<br/><br/>return 0;<br/>}]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/2/52.htm</link>
			<title><![CDATA[Visual studio 2005 remote debug (vs2005远程调试)]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[技术文摘]]></category>
			<pubDate>Mon,15 Mar 2010 15:19:21 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=52</guid>
		<description><![CDATA[-( 本文针对 vc++ 做总结 )-<br/><br/>在开发系统(如 Win7)上没有问题，而在其他系统(WinXP/Win2003)上有问题，远程调试非常有价值。<br/>因为，安装一下开发环境费时费力。<br/><br/>试了试 vs2005 的远程调试，和 vc6 的有些不同。<br/><br/>1. 【目标机】首先复制文件到目标机器上：<br/>》D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger <br/>》D:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist<br/>》程序的调试版放到 Microsoft.VC80.DebugCRT 同级目录下（！）<br/><br/>2. 【目标机】设置目标机的账号策略：<br/>》gpedit.msc &gt; &#34;计算机配置&#34;/&#34;Windows 设置&#34;/&#34;安全设置&#34;/&#34;安全选项&#34;/&#34;网络访问：本地账户的共享和安全模式&#34;，选择 “经典-本地用户以自己的身份验证”。 为了简化，直接在运行 msvsmon.exe 后，“工具”/”选项“ 对话框中 “无身份验证”和“允许任何用户进行调试”就 OK 了。<br/><br/>3. 【目标机】启动程序<br/><br/>4. 【调试机】开始远程调试<br/>》执行 IDE 中的 ”调试&#34;/&#34;附加到进程&#34; 对话框。“传输”选 “远程...&#34;，&#34;限定符&#34;输入【目标机】的计算机名，然后点击”刷新“按钮，找到带调试的程序。<br/><br/>好，就这些步骤。记录在这里，方便自己，方便路人甲。呵呵。]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/3/51.htm</link>
			<title><![CDATA[Linksys wrt300NV1.1无线路由TTL刷机历程]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[个人日志]]></category>
			<pubDate>Sat,30 Jan 2010 10:21:30 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=51</guid>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近入了一台思科的802.11N无线路由wrt300N,CPU是300MZH内存128M,flash 8M,足够玩的了.<br/>刷了DD-wrt第三方固件这是个linux系统,功能强大可扩展性也非常好,已经改好了支持usb2.0,感觉非常好呵呵.<br/>一时手痒刷了OpenWrt瞬间变砖,其实刷机变砖硬件都是没坏的,只是软件问题,任何软件问题都是能修复的,呵呵那就修复系统吧.<br/><br/>第一步是确定路由主板上的TTL位置<br/>路由主板后面Wan口不远的地方有5个小焊盘,左边第一个为GND，第二个空着不要接，第三个为RX，第四个TX，的五个不要接.<br/>恩山的TTL刷机线(UART调试线),黑色是GND/绿色是RX/白色是TX,红色是VCC不要接(我是直接剪短防止碰到元器件造成烧毁).<br/><br/>接好线后打开SecureCRT(一个很好用的Telnet软件)设置:<br/>协议:Serial(串口)<br/>端口:(看TTL线在系统的映射情况填写)<br/>波特率:115200<br/>数据位:8<br/>奇偶校验:None(无)<br/>停止位:1<br/>流控制全不选<br/>设置好后点连接应该会顺利连接上.<br/>路由器通电应该有调试信息输出.<br/><br/>第二步就是刷机过程了.<br/>准备工作,先打开cmd窗口,准备好tftp上传命令如:tftp -i 192.168.1.1 put xxx.bin<br/>准备好不要按回车回到SecureCRT窗口.<br/>路由器上电瞬间不停的按Ctrl+C(越快越好最好上电前就开始按),如果来不及可以找个人帮你插路由器电源,<br/>再此特别感谢小宋同学的大力帮忙呵呵,帮我插拔路由器电源N次,TTL接线的时候也想了很多好办法.<br/>如果顺利路由器会被中断启动停在CFE&gt;命令状态.<br/>输入flash -noheader : flash1.trx回车后路由器会自动开启tftp等待上传固件<br/>这个时候迅速切换到之前准备好的cmd窗口按回车,固件就开始上传了.<br/>上传完毕后会在SecureCRT中看到Programing... 预示着路由器开始刷flash了<br/>等待数分钟后会提示完成.<br/>然后清下nv 命令:nvram clear(这个命令貌似非必须)<br/>最后输入reboot命令重启路由,如果一切顺利路由器应该会完美启动了.<br/>测试是否启动成功除了看SecureCRT中提示外最好用浏览器进一下路由看能否进入,<br/>我们就是看了SecureCRT里面有很多错误提示误以为没刷机成功,而换着花样的重复刷机数次,哎浪费时间啊.<br/>到此刷机过程结束.开始自己配置吧.<br/>千万别乱刷nvram,刷错了TTL就没法修复了.只能用JTAG线直接刷flash了.....<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.emaer.com/article/2/50.htm</link>
			<title><![CDATA[如何选择路由器DD-WRT版本(VINT o&#114; NEWD o&#114; NEWD2)]]></title>
			<author>emaer@qq.com(emaer)</author>
			<category><![CDATA[技术文摘]]></category>
			<pubDate>Thu,28 Jan 2010 14:56:05 +0800</pubDate>
			<guid>http://www.emaer.com/default.asp?id=50</guid>
		<description><![CDATA[现在新版的 DD-WRT 区分三个版本，一个是 VINT，一个是 NEWD 一个是 NEWD2，我们的路由器究竟应该刷哪个版本？其实官方已经有明确的说明。<br/>其实简单点来说，VINT 和 NEWD 这两个版本是针对不同的路由器芯片而制作的。VINT 主要支持 47xx 的 CPU，NEWD 支持 5352 的 CPU。那么肯定会有人问，如果明明你的 CPU 型号是 47xx 系列的，如果刷了 NEWD 会怎么样？答案很明显啦，你的路由变成板砖了。。。<br/><br/>所以，我们要学习如何来区分你的路由的 CPU 是哪种型号的，办法如下。<br/>在命令提示符窗口输入下列指令登录进路由器（IP 地址是默认的，如果你更改过，请用新的IP）：<br/><br/>1） telnet 192.168.1.1<br/>2） 输入用户名和密码<br/>3） nvram show|grep corerev<br/><br/><br/>然后根据显示的内容中的 wl0_corerev 的值进行区分：<br/>wl0_corerev=4 ， 则一定要使用 VINT 版<br/>wl0_corerev &gt;=5 &lt;=7， 则 VINT 版 和 NEWD 版都可用，建议使用 VINT 版<br/>wl0_corerev &gt;=8， 则 VINT 版 和 NEWD 版都可用<br/>wl0_corerev &gt;9， 则一定要使用 NEWD 版<br/>wl0_corerev =16 ，可以使用 NEWD2 版本(使用 NEWD2 变砖可能性比较大）<br/><br/>请刷新 DD-WRT 新版的时候，一定要根据上面的规则来，千万别刷错了！<br/><br/> <br/><br/>注明：以上反馈值有时候并不准确，还是根据型号区别比较好，免得变砖。<br/><br/> <br/><br/>另外 NEWD 和 NEWD2 的区别，官方已经写明了 NEWD 和 NEW2区别:<br/><br/>NEWD = Kernel K2.4.37 and wl driver = 4.150.10.31<br/>NEWD2 = Kernel K2.4.37 and wl driver = 4.150.66.6<br/>NEWD 和 NEWD2 内核是相同的，区别是驱动不同，查看路由驱动命令是 wl ver&nbsp;&nbsp;&nbsp;&nbsp;内核命令是 uname -a<br/><br/> <br/><br/>NEWD2支持的路由器列表<br/><br/>Asus WL-520GU<br/>Asus WL-500W<br/>Asus WL-500G Premium V2<br/><br/><br/>Belkin F5D7231 v2000<br/><br/><br/>D-Link DIR-320<br/><br/><br/>Buffalo WHR-G54S<br/>Buffalo WHR-HP-G54<br/>Buffalo WHR-G125<br/>Buffalo WZR-G300N<br/><br/><br/>Linksys WAP54G v3.1 (the v3.0 is not tested - redhawk)<br/>Linksys WRT54G v5, v6<br/>Linksys WRT54GS v5 (no afterburner-page4)<br/>Linksys WRT54GS v6 (afterburner working - page4)<br/>Linksys WRT54G-TM<br/>Linksys WRT150N v1 / v1.1<br/>Linksys WRT160N v3 - Special K26 NEWD2 only.<br/>Linksys WRT300N v1.1 only<br/>Linksys WRT310N v1<br/>Linksys WRT600N v1 / v1.1<br/>Linksys WRT610N v1 (the build with 610n in the name is NEWD2)<br/><br/><br/> <br/><br/>不支持的路由器列表<br/><br/>Asus WL-500G Premium (V1)<br/><br/><br/>Linksys WAP54G v1 / v2<br/>Linksys WRH54G<br/>Linksys WRT54G v1 through v4<br/>Linksys WRT54G v8, v8.2<br/>Linksys WRT54G2 v1<br/>Linksys WRT54GS v4, v7.2<br/>Linksys WRT54GL v1 / v1.1<br/>Linksys WRTSL54GS v1<br/>Linksys WRT160N v1-v2<br/>Linksys WRT300N v1<br/>Linksys WRT350N<br/><br/><br/>Netgear WNR834b v1 / v2<br/>Netgear WGR614L/v8<br/><br/><br/>US Robotics USR5461<br/><br/><br/>Motorola WR850G V2<br/>]]></description>
		</item>
		
</channel>
</rss>

