<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[RedRiver专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/RedRiver331</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; RedRiver331]]></copyright><item><title><![CDATA[异常规范]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/1766583</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/1766583</guid><author>RedRiver331</author><pubDate>Fri, 31 Aug 2007 10:48:00 +0800</pubDate><description><![CDATA[异常增强了API的一致性。如果使用异常，那么报告错误的方式是固顶的，从而保证了API的一致性想在面向对象框架中统一使用返回值来报告错误是不可能的，在这种情况下，唯一的选择是使用返回值之外的错误报告方法，比如异常使用异常使得对于开发人员处理错误的位置更加灵活更容易使错误处理局部化错误码很容易被忽略，而且通常都被忽略异常可以包含丰富的信息来对错误的原因加以描述异常允许用户定义未]]></description><category></category></item><item><title><![CDATA[反射与属性]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/1761811</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/1761811</guid><author>RedRiver331</author><pubDate>Tue, 28 Aug 2007 11:30:00 +0800</pubDate><description><![CDATA[ 反射与属性反射是编程的读取与类型相关联的元数据的行为，通过元数据，你能了解它是什么类型以及它是由什么构成的（方法、属性、基类）.反射服务在system.Reflection命名空间中定义，它在和属性一起使用时最有用。属性是一种向类型添加信息并影响类型行为的方法。反射还允许在运行期间定义新类型，并生成相应的IL代码和元数据（使用在System.Reflection.Emit命名]]></description><category></category></item><item><title><![CDATA[How to call c++ exported method and classes in c#]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/1009934</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/1009934</guid><author>RedRiver331</author><pubDate>Wed, 02 Aug 2006 11:44:00 +0800</pubDate><description><![CDATA[相对于C++来说，C#是个newcomer，C#提供了一些非常cool的功能，使得我们的工作更加容易。但是，在这个组件横行的年代，如果不懂利用别人写好的代码，就有点落伍了。在C++横行江湖的日子里，留下了很多功能强大的代码，探讨如何在C#的程序中使用这些代码是非常有趣也很有意义的事情，这也是我们今天这篇文章的主题。　　C#是managed code，而C++不是，他们之间的几种交互方式可以用下图表]]></description><category></category></item><item><title><![CDATA[对 Windows 窗体控件进行线程安全调用]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/884021</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/884021</guid><author>RedRiver331</author><pubDate>Thu, 06 Jul 2006 10:39:00 +0800</pubDate><description><![CDATA[访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态，则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug，包括争用情况和死锁。确保以线程安全方式访问控件非常重要。.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时，如果创建某控件的线程之外的其他线程试图调用该控件，则调试器会引发一]]></description><category></category></item><item><title><![CDATA[关于MFC下检查和消除内存泄露的技巧]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/883949</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/883949</guid><author>RedRiver331</author><pubDate>Thu, 06 Jul 2006 10:24:00 +0800</pubDate><description><![CDATA[检测内存泄漏的主要工具是调试器和 CRT 调试堆函数。若要启用调试堆函数，请在程序中包括以下语句：#define CRTDBG_MAP_ALLOC#include #include 注意 #include 语句必须采用上文所示顺序。如果更改了顺序，所使用的函数可能无法正确工作。 通过包括 crtdbg.h，将 malloc 和 free 函数映射到其“Debug”版本_malloc]]></description><category></category></item><item><title><![CDATA[VC使用CRT调试功能来检测内存泄漏]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/883943</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/883943</guid><author>RedRiver331</author><pubDate>Thu, 06 Jul 2006 10:21:00 +0800</pubDate><description><![CDATA[        C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存，但是中国有句古话：“最大的长处也可能成为最大的弱点”，那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序开发过程中，动态分配的内存处理不当是最常见的问题。其中，最难捉摸也最难检测的错误之一就是内存泄漏，即未能正确释放以前分配的内存的错误。偶尔发生的少量内存泄漏可能不会引起我们的注意，但泄漏大量内存的程序]]></description><category></category></item><item><title><![CDATA[time_t到.NET的转换]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/865231</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/865231</guid><author>RedRiver331</author><pubDate>Sun, 02 Jul 2006 11:39:00 +0800</pubDate><description><![CDATA[方法1：public DateTime UNIXtoDateTime(long seconds) { double secs = Convert.ToDouble(seconds); DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(secs); return System.TimeZone.CurrentTimeZone.T]]></description><category></category></item><item><title><![CDATA[何时使用委托而不使用接口]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/862689</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/862689</guid><author>RedRiver331</author><pubDate>Sat, 01 Jul 2006 21:39:00 +0800</pubDate><description><![CDATA[委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现；可以为任何类中的方法创建委托，前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性，那么类设计器何时应使用委托，何时又该使用接口呢？在以下情况中使用委托：        当使用事件设计模式时。            当封装静态方法可]]></description><category></category></item><item><title><![CDATA[关于vc的mshflexgrid控件的用法]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/854980</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/854980</guid><author>RedRiver331</author><pubDate>Fri, 30 Jun 2006 10:40:00 +0800</pubDate><description><![CDATA[ 这一节包含关于 MSHFlexGrid 的控件常数的信息。注意这些常数也应用到 MSFlexGrid，除非有不同地注解。AddModeSettings 属性 (MSHFlexGrid)常数 值 描述 flexNoAddNew 0 当前单元不在最后行中，并且没有 AddNew 操作处于待决。 flexAddNewCurrent 1 当前单元在最后一行，但没有 AddNew 操作处于待决。 ]]></description><category></category></item><item><title><![CDATA[VS2005中用Code Snippets提高开发效率]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/840497</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/840497</guid><author>RedRiver331</author><pubDate>Tue, 27 Jun 2006 14:53:00 +0800</pubDate><description><![CDATA[在VS.NET 2005中，新增加了许多新的特性和功能。其中在方便用户编程方面有了很大的改进，比如新增加了code snippets（代码片断助手）功能。所谓的code snippets，是用户可以在编程过程中，将经常要用到的一些常用代码或者值得收藏起来的代码保存起来，在要使用的时候就可以方便地调用出来。本文将介绍如何将vs.net 2005自带的code snippets加到已有的应用程序中去，]]></description><category></category></item><item><title><![CDATA[自定义消息]]></title><link>https://blog.youkuaiyun.com/RedRiver331/article/details/835635</link><guid>https://blog.youkuaiyun.com/RedRiver331/article/details/835635</guid><author>RedRiver331</author><pubDate>Mon, 26 Jun 2006 09:45:00 +0800</pubDate><description><![CDATA[你可以使用RegisterWindowMessage来确定一个没有被Windows占用的消息值，然后使用ON_REGISTERED_MESSAGE句柄来定义消息过程，如下面的这个例子：     const UINT WM_TASKBARCREATED =      ::RegisterWindowMessage(_T("TaskbarCreated"));          BEGIN_MESSA]]></description><category></category></item></channel></rss>