<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lyclowlevel的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/lyclowlevel</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; lyclowlevel]]></copyright><item><title><![CDATA[从ATL窗口销毁想到的对象生命周期管理]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/7487371</link><guid>https://blog.csdn.net/lyclowlevel/article/details/7487371</guid><author>lyclowlevel</author><pubDate>Sun, 22 Apr 2012 20:35:24 +0800</pubDate><description><![CDATA[使用ATL窗口时，经常会手动销毁窗口，大致的代码如下：
    DestroyWindow();
    m_hWnd = NULL;
DestoryWindow()调用是同步的，函数返回时窗口已经被销毁。做为一个微软的好公民，手动将m_hWnd置为空是一个好习惯。
    但是，这种做法是不合理的。因为m_hWnd是父类的成员，它的值应该由父类控制。其实，在某些情况下这种做法会产生一个隐]]></description><category></category></item><item><title><![CDATA[深入了解WM_SIZE]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/7319099</link><guid>https://blog.csdn.net/lyclowlevel/article/details/7319099</guid><author>lyclowlevel</author><pubDate>Sun, 04 Mar 2012 22:36:15 +0800</pubDate><description><![CDATA[在窗口大小发生改变时，系统往窗口发送WM_SIZE消息，WPARAM指出窗口新的状态，LPARAM给出窗口新的大小。窗口的状态有三种：SIZE_MINIMIZE，SIZE_MAXIMIZE，SIZE_RESTORED。系统根据当前窗口的状态，在产生WM_SIZE消息时指定不同的WPARAM。然而，系统如何知道窗口当前的状态。很显然，系统必须用一些内存保存窗口当前的状态。保存在哪里呢？]]></description><category></category></item><item><title><![CDATA[z-order引出的问题]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/7294980</link><guid>https://blog.csdn.net/lyclowlevel/article/details/7294980</guid><author>lyclowlevel</author><pubDate>Sun, 26 Feb 2012 11:13:01 +0800</pubDate><description><![CDATA[在窗口与窗口之间毫无重叠的情况下，根本不需要关心z-order。然而，当窗口之间出现重叠时，系统就需要通过一个标准来确定窗口的显示顺序。这个标准就是z-order。存在多个因素影响一个窗口的z-order：
       1、窗口类型是否为TOPMOST；
       2、窗口间的父子关系；
       3、窗口间的owner关系；
       4、是否为active状态。]]></description><category></category></item><item><title><![CDATA[什么是AppID]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6888969</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6888969</guid><author>lyclowlevel</author><pubDate>Wed, 19 Oct 2011 21:21:56 +0800</pubDate><description><![CDATA[在COM中，安全控制的最小单位是进程，每个进程都有对应的安全控制策略。进程的安全控制策略保存在注册表中，存储位置为：HKCR\AppID\。
    AppID指的就是，是一个128位的GUID。该子键保存访问权限、启动权限等安全配置信息。开发COM组件时，可以在COM组件对应的CLSID子键下
新建字符串类型的项，名称：AppID，值：该COM组件所在进程的AppID值。这样就表示该COM组]]></description><category></category></item><item><title><![CDATA[使用ShellExcecute打开指定目录并选中指定文件的方法]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6861554</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6861554</guid><author>lyclowlevel</author><pubDate>Tue, 11 Oct 2011 10:02:32 +0800</pubDate><description><![CDATA[语句如下：
    ShellExecute(NULL, _T("open"), _T("explorer"), _T("/select,\"f:\\TDDownload\\down=yes.zip\""), NULL, SW_NORMAL);
    注意，第四个参数中路径]]></description><category></category></item><item><title><![CDATA[套接字的关闭过程]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6807683</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6807683</guid><author>lyclowlevel</author><pubDate>Fri, 23 Sep 2011 23:30:39 +0800</pubDate><description><![CDATA[通常我们调用closesocket关闭套接字，套接字的关闭过程，有以下三种情况：
    1、取消没有进行的发送操作，系统在后台发起一个关闭过程，向对等方发送FIN报文，并等待对等方的FIN报文。整个关闭过程不会产生任何的事件（WSAEventSelect)和消息（WSAAsy]]></description><category></category></item><item><title><![CDATA[套接字的属性]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6798722</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6798722</guid><author>lyclowlevel</author><pubDate>Wed, 21 Sep 2011 22:38:37 +0800</pubDate><description><![CDATA[以前我总是将是否处于阻塞模式和是否可以进行异步IO操作混淆起来。以前，我认为可以进行异步IO操作的套接字必然不是处于阻塞模式；处于阻塞模式的套接字无法进行异步IO操作。最新比较正规地学习win socket开发，终于分清这两个概念。
    其实，是否处于阻塞模式、是否可以进行]]></description><category></category></item><item><title><![CDATA[你的“重叠IO”是真正异步的吗？]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6798563</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6798563</guid><author>lyclowlevel</author><pubDate>Wed, 21 Sep 2011 21:09:07 +0800</pubDate><description><![CDATA[什么是同步IO？什么是异步IO？
在windows下，一个IO读操作可以分为两大步：
1、从IO设备读取数据，保存在系统的缓冲区；
2、从系统缓冲区拷贝到用户的缓冲区。
如果一个读操作的两个步骤都不在用户线程中执行，那么这个读操作就是异步的；只要有一个
步骤在用户线程中]]></description><category></category></item><item><title><![CDATA[关系依赖倒置原则]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6755080</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6755080</guid><author>lyclowlevel</author><pubDate>Tue, 06 Sep 2011 22:55:59 +0800</pubDate><description><![CDATA[首先，解释几个概念。
    高级组件、低级组件

    假设有类A，类B。类A的方法中有调用了类B的方法。我们认为类A依赖于类B，类A是基于类B实现的。相对于类B而言，类A是“高级组件”。
相对于类A而言，类B是“低级组件”。
    所谓“关系依赖倒置原则”，是指]]></description><category></category></item><item><title><![CDATA[DllMain相关注意事项]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6755037</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6755037</guid><author>lyclowlevel</author><pubDate>Tue, 06 Sep 2011 22:49:31 +0800</pubDate><description><![CDATA[1、在DllMain的DLL_PROCESS_ATTACH分支中，尽量只调用kernel32.dll中的函数。因为其他系统api可能依赖于其他dll，而那些dll有可能还没有被加载到进程空间中且依赖于当前DllMain所在的dll，这样会导致循环依赖；
    其实，在用户进程]]></description><category></category></item><item><title><![CDATA[使用WTL::CBitmap时需要注意的一个事项]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6555877</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6555877</guid><author>lyclowlevel</author><pubDate>Mon, 20 Jun 2011 11:34:00 +0800</pubDate><description><![CDATA[CBitmap::LoadBitmap可以从EXE模块中获取指定资源的位图句柄（HBITMAP），该函数内部使用WIN32 API：LoadBitmap加载资源。仔细查看API LoadBitmap的remark部分，可以发现该API加载后得到的位图是一个“设备相关的位图”。这样就存在一些缺陷：这种位图无法选入到打印机中；如果当前的系统配置改变，加载得到的位图也会跟着改变。本人在实际项目中]]></description><category></category></item><item><title><![CDATA[条款18：避免使用vector]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6544955</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6544955</guid><author>lyclowlevel</author><pubDate>Tue, 14 Jun 2011 22:53:00 +0800</pubDate><description><![CDATA[原文地址：http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/0679f2ec71efa42363d09fcc.html做为一个STL容器，vector确实只有两个问题。第一，它不是一个STL容器。第二，它并不容纳bool。除此以外，就没有什么要反对的了。一个东西不能成为STL容器只因为会有人会说它是。一个东西要成为STL容器]]></description><category></category></item><item><title><![CDATA[ATL的另一个陷阱]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6454393</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6454393</guid><author>lyclowlevel</author><pubDate>Mon, 30 May 2011 12:11:00 +0800</pubDate><description><![CDATA[ATL早期提供了宏A2W,W2A进行编码转换，但是该组宏存在以下缺点：
1、默认认为转换前的参数（A2W）、转换后的结果（W2A）的编码是ANSI；
2、转换后结果保存在栈上。
 
该组宏无法满足我们从UTF8、UCS2之间的互相转换，并且有可能导致栈溢出。鉴于此，当我发]]></description><category></category></item><item><title><![CDATA[WSADuplicateSocket、WSASocket失败，错误码为WSAEINVAL(10022)]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6240822</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6240822</guid><author>lyclowlevel</author><pubDate>Fri, 11 Mar 2011 18:08:00 +0800</pubDate><description><![CDATA[PS：最近又发现一种无法复用套接字的情况，修改一下。2011/10/11 16:24


一、失败的原因：

1、MS的解释
    http://support.microsoft.com/kb/216603/en-us 

2、目标进程和当前进程不在同一个se]]></description><category></category></item><item><title><![CDATA[线程退出时，其拥有的窗口资源也会被释放掉。]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6227323</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6227323</guid><author>lyclowlevel</author><pubDate>Sun, 06 Mar 2011 17:38:00 +0800</pubDate><description><![CDATA[http://msdn.microsoft.com/en-us/library/ms686724%28v=vs.85%29.aspx
 
 
Terminating a thread has the following results:

Any resources o]]></description><category></category></item><item><title><![CDATA[ATL的BUG]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6196227</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6196227</guid><author>lyclowlevel</author><pubDate>Sun, 20 Feb 2011 15:09:00 +0800</pubDate><description><![CDATA[CStringA strA(_T("");

CStringW strW("");

以上语句调用GetLastError()会返回ERROR_INSUFFICIENT_BUFFER.原因在于CString内部会调用WideCharToMultiByte.MultiByt]]></description><category></category></item><item><title><![CDATA[关于复用套接字]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6187104</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6187104</guid><author>lyclowlevel</author><pubDate>Wed, 16 Feb 2011 01:22:00 +0800</pubDate><description><![CDATA[可以通过WSADuplicateSocket在进程内共享套接字，但是在什么时候调用closesocket关闭套接字，却没有明确的做法。
 
之前，我是在进程退出时统一关闭这些套接字。但是，这种做法会在极少数的XP+IE6环境下崩溃（必崩）。至今，原因未明。
 
由于套接字]]></description><category></category></item><item><title><![CDATA[IE下载流程之臆测篇]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6185441</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6185441</guid><author>lyclowlevel</author><pubDate>Tue, 15 Feb 2011 10:43:00 +0800</pubDate><description><![CDATA[1、如何让IE关闭套接字？
 
返回0，或者返回SOCKET_ERROR并设置合适的错误码。
 
2、IE如何处理已访问过的URL？
 
如果当前访问的URL在很短的时间前也被访问过，那么IE会尝试从缓存获取结果。
 
如果通过返回0让IE关闭套接字的话，IE会认]]></description><category></category></item><item><title><![CDATA[InternetGetCookieEx]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6179632</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6179632</guid><author>lyclowlevel</author><pubDate>Fri, 11 Feb 2011 19:05:00 +0800</pubDate><description><![CDATA[AYU说在IE6.0下，这个API会将ucs-2的字符串当成UTF-8处理，从而返回错误的长度。]]></description><category></category></item><item><title><![CDATA[单一内核、微内核]]></title><link>https://blog.csdn.net/lyclowlevel/article/details/6120199</link><guid>https://blog.csdn.net/lyclowlevel/article/details/6120199</guid><author>lyclowlevel</author><pubDate>Thu, 06 Jan 2011 14:07:00 +0800</pubDate><description><![CDATA[内核：操作系统的核心代码，且运行于内核模式下。
 
如果内核的所有模块都在同一进程中，就称为单一内核；如果内核的模块在不同进程中，就称为微内核。
 
WINDOWS NT系列的OS将一些非传统意义上的内核模块（如GDI）放在内核中，因此WINDOWS不是
纯粹意义上的微]]></description><category></category></item></channel></rss>