<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>VC知识库 MSDN 杂志翻译项目组</title><link>http://blog.vckbase.com/msdnmtt/</link><description>MSDN Magazine Translation Team's Blog</description><managingEditor>VCKBASE MSDN MTT</managingEditor><dc:language>af</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：C++ Q&amp;A(2006/05) 专栏：Web 版本检查，为应用程序添加声音</title><link>http://blog.vckbase.com/msdnmtt/archive/2006/09/18/22461.html</link><pubDate>Mon, 18 Sep 2006 09:48:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/09/18/22461.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/22461.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/09/18/22461.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/22461.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/22461.html</trackback:ping><description>&lt;P&gt;在线杂志第47期有一篇专栏文章中描述了如何实现一个叫 CWebVersion 的类，用它可以存取网络上的某个文件来检查软件的版本，当版本过期后提示用户更新程序。该类实现使用 FTP 来下载文件，但有的站点 ISP 不允许使用匿名 FTP 连接，只能通过用户和口令登陆。那么能不能用 HTTP 来代替 FTP，将版本文件作为 Web 页面下载呢?&lt;BR&gt;　　本文还包含如何在基于 MFC 的应用程序中添加声音效果（不仅仅是用 MessageBeep 函数发出的蜂鸣声）。&lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1682"&gt;&lt;FONT color=#000080&gt;全文阅读&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/22461.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：C++ Q&amp;A(1998/04)专栏：如何获取某个动态链接库的版本信息</title><link>http://blog.vckbase.com/msdnmtt/archive/2006/04/29/19853.html</link><pubDate>Sat, 29 Apr 2006 15:00:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/04/29/19853.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/19853.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/04/29/19853.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/19853.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/19853.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1642"&gt;如何获取某个动态链接库的版本信息&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;我如何获得安装在我的系统上的某个特定的 DLL 的版本信息？我尝试着确定系统安装了哪个版本的 comctl32.dll。我见过有些代码调用 GetProcAddress 来获取各种函数，如 InitCommonControlsEx，以确定基于不同版本的函数调用。对于我来说，这是一个坎儿，到底用什么方法获得版本号？&lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1642"&gt;&lt;FONT color=#000080&gt;全文阅读&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/19853.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：Test Run (2005/10)专栏：Web 应用程序用户界面低层测试自动化</title><link>http://blog.vckbase.com/msdnmtt/archive/2006/04/19/19645.html</link><pubDate>Wed, 19 Apr 2006 14:03:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/04/19/19645.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/19645.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/04/19/19645.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/19645.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/19645.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1639"&gt;Web 应用程序用户界面低层测试自动化&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Web 应用程序日渐复杂，对它们的测试工作也变得越来越重要。有很多测试技术可供你选择使用。例如，在 2005 年 4 月份的 MSDN 杂志中，我描述了一个基于 JScript 的简单系统，它使用 IE 的文档对象模型(Internet Explorer Document Model)来完整地测试某个 Web 应用程序的用户界面。这个技术很有效，但是在几个方面存在着缺陷。我的一些同事问我是否能使用 .Net 框架编写功能更强，但仍然 是轻量级的 Web 应用程序用户界面自动化测试程序。在这个月的专栏文章中，我将向你们展示怎样达到这个目的。这个低层技术要求直接调用 fmshtml.dll 和 shdocvw.dll 动态链接库来访问和操纵 IE 浏览器客户区中的 HTML 对象。&lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1639"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/19645.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章： C++ At Work (2006/03) 专栏：事件编程（二） </title><link>http://blog.vckbase.com/msdnmtt/archive/2006/04/09/19338.html</link><pubDate>Sun, 09 Apr 2006 09:55:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/04/09/19338.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/19338.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/04/09/19338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/19338.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/19338.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1635"&gt;C++ At Work (2006/03) 专栏：事件编程（二）&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;在本文的&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1616" target=_blank&gt;第一部分&lt;/A&gt;（事件编程一），我回答了一个关于用 C++ 实现本机事件的问题。讨论了一般意义上的事件并示范了如何用接口为你的类定义事件处理器，事件的处理必须在客户机实现。我的实现有一些缺陷，我承诺过最终要解决掉，本文就来完成这件事情。&lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1635"&gt;&lt;FONT color=#000080&gt;全文阅读&lt;/FONT&gt;&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/19338.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：定制调试诊断工具和实用程序——摆脱DLL“地狱”（DLL Hell）的困扰（八） </title><link>http://blog.vckbase.com/msdnmtt/archive/2006/03/23/18699.html</link><pubDate>Thu, 23 Mar 2006 12:42:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/03/23/18699.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/18699.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/03/23/18699.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/18699.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/18699.html</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1627"&gt;定制调试诊断工具和实用程序&amp;#8212;&amp;#8212;摆脱DLL&amp;#8220;地狱&amp;#8221;（DLL Hell）的困扰（八）&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;CreateRemoteThread，命令行及其它&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;　　你已经看到如何用 Win32 调试 API 来揭示进程是怎样加载 DLLs 以及加载到哪里的。现在让我们来揭开CreateRemoteThread 的秘密，这个函数允许你使用另外一个进程在其上下文中启动函数作为线程运行： &lt;/P&gt;&lt;PRE&gt;HANDLE CreateRemoteThread(
  HANDLE hProcess,                          // 进程句柄
  LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD-安全描述符
  DWORD dwStackSize,                        // 初始栈大小
  LPTHREAD_START_ROUTINE lpStartAddress,    // 线程函数
  LPVOID lpParameter,                       // 线程参数
  DWORD dwCreationFlags,                    // 创建选项
  LPDWORD lpThreadId                        // 线程标示符
);&lt;/PRE&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1627"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/18699.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：定制调试诊断工具和实用程序——摆脱DLL“地狱”（DLL Hell）的困扰（七） </title><link>http://blog.vckbase.com/msdnmtt/archive/2006/03/22/18687.html</link><pubDate>Wed, 22 Mar 2006 15:04:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/03/22/18687.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/18687.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/03/22/18687.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/18687.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/18687.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1626"&gt;定制调试诊断工具和实用程序&amp;#8212;&amp;#8212;摆脱DLL&amp;#8220;地狱&amp;#8221;（DLL Hell）的困扰（七）&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;&lt;B&gt;Windows Loader 知道一切&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;　　除了 Win32 调试 API 之外，Windows 还提供另外一种很好的关于 DLL 加载地址冲突的信息源。那就是在注册表中设置的一些全局标志（或 GFlags）：&lt;/P&gt;&lt;PRE&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options&lt;/PRE&gt;
&lt;P&gt;　　从而改变 Windows 处理应用程序的方式。GFlags.exe (see Figure 8) 是一个&lt;A href="http://www.microsoft.com/whdc/ddk/debugging/" target=_blank&gt;微软调试工具&lt;/A&gt;之一，用它可以轻松更改上述的注册表项值。&lt;/P&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1626"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/18687.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：MANAGED SPY：用我们的新工具继续 Spy++对Windows Forms 的神话</title><link>http://blog.vckbase.com/msdnmtt/archive/2006/03/17/18562.html</link><pubDate>Fri, 17 Mar 2006 14:50:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/03/17/18562.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/18562.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/03/17/18562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/18562.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/18562.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1625"&gt;MANAGED SPY：用我们的新工具继续 Spy++对Windows Forms 的神话&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;本文讨论：&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp; 新工具ManagedSpy 
&lt;LI&gt;&amp;nbsp; 理解ManagedSpy在调试中如何工作和起作用的 
&lt;LI&gt;&amp;nbsp; 看看ManagedSpyLib的内部工作机制 
&lt;LI&gt;&amp;nbsp; 在单元测试中使用ManagedSpyLib &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;有不少开发者使用Visual Studio&amp;#174;提供的工具Spy++。使用Spy++，你可以了解一个运行中的应用程序的窗体布局或确定一个导致bug的特定窗体消息。然而，当你创建一个基于Microsoft&amp;#174; .NET框架的应用程序，Spy++变得不太管用了，因为由Spy++截取窗体消息和类不能与开发者使用或甚至看到的任何事情通信。开发者真正所想看到的是被托管的事件和属性值。&lt;/P&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1625"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/18562.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：定制调试诊断工具和实用程序——摆脱DLL“地狱”（DLL Hell）的困扰（六） </title><link>http://blog.vckbase.com/msdnmtt/archive/2006/03/02/18128.html</link><pubDate>Thu, 02 Mar 2006 14:54:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/03/02/18128.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/18128.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/03/02/18128.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/18128.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/18128.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1617"&gt;定制调试诊断工具和实用程序&amp;#8212;&amp;#8212;摆脱DLL&amp;#8220;地狱&amp;#8221;（DLL Hell）的困扰（六）&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;&lt;B&gt;摘要&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;　　本文前面讨论了用几种不同的方法来获取进程及其相关 DLLs 的信息，例如通过 PSAPI、NTDLL 以及TOOLHELP32 库提供的 APIs，在这一部分，作者给出了几种获得系统级信息的非常规方法，你可以轻松将它们集成到自己的工具包中。本文范例包含三个实用工具：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;LoadLibrarySpy，监视并扫描应用程序加载了哪些 DLLs； 
&lt;LI&gt;WindowDump，获取任何窗口的的内容以及窗口的详细描述信息； 
&lt;LI&gt;FileUsage，重定向控制台程序，揭示哪个进程正在使用打开的文件； &lt;/LI&gt;&lt;/UL&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1617"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/18128.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章： C++ At Work (2006/02) 专栏：事件编程（一）</title><link>http://blog.vckbase.com/msdnmtt/archive/2006/02/25/17972.html</link><pubDate>Sat, 25 Feb 2006 06:37:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/02/25/17972.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/17972.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/02/25/17972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/17972.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/17972.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1616"&gt;事件编程（一）&lt;/A&gt; 
&lt;P&gt;&lt;BR&gt;&amp;nbsp;在微软 .NET 框架中可以定义托管类事件并用委托和 += 操作符处理这些事件。这种机制似乎很有用，那么在本机 C++ 中有没有办法做同样的事情？&lt;/P&gt;&lt;br&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1616"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/17972.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>VCKBASE MSDN MTT</dc:creator><title>MSDN 杂志翻译文章：定制调试诊断工具和实用程序——摆脱DLL“地狱”（DLL Hell）的困扰（五） </title><link>http://blog.vckbase.com/msdnmtt/archive/2006/01/20/17201.html</link><pubDate>Fri, 20 Jan 2006 08:30:00 GMT</pubDate><guid>http://blog.vckbase.com/msdnmtt/archive/2006/01/20/17201.html</guid><wfw:comment>http://blog.vckbase.com/msdnmtt/comments/17201.html</wfw:comment><comments>http://blog.vckbase.com/msdnmtt/archive/2006/01/20/17201.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blog.vckbase.com/msdnmtt/comments/commentRss/17201.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/msdnmtt/services/trackbacks/17201.html</trackback:ping><description>&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1601"&gt;定制调试诊断工具和实用程序&amp;#8212;&amp;#8212;摆脱DLL"地狱"（DLL Hell）的困扰（五）&lt;/A&gt; 
&lt;P&gt;在 Windows 系统中，动态库版本冲突实在是一个老大难的问题了，为了解决这个问题，除了使用大量现有的工具外，你还可以利用丰富的 Windows APIs 函数构造自己的调试工具和实用程序。作为例子，该代码示范了几个这种类型的工具，展示如何利用它们来解决动态库的冲突问题.....&lt;BR&gt;&lt;/P&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1601"&gt;&lt;/A&gt;&lt;/P&gt;&lt;BR&gt;&lt;A href="http://www.vckbase.com/document/viewdoc/?id=1601"&gt;全文阅读&lt;/A&gt;&lt;img src ="http://blog.vckbase.com/msdnmtt/aggbug/17201.html" width = "1" height = "1" /&gt;</description></item></channel></rss>