<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>七猫的藏经阁</title><link>http://blog.vckbase.com/bastet/</link><description>其实只是垃圾箱</description><managingEditor>Diviner</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>Diviner</dc:creator><title>milkdrop,你懂的，要原码的qq联系，</title><link>http://blog.vckbase.com/bastet/archive/2010/08/09/51380.html</link><pubDate>Mon, 09 Aug 2010 08:22:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/08/09/51380.html</guid><description>最好能赞助开源事业，&lt;BR&gt;http://blog.vckbase.com/Files/BastEt/kingvis.rar&lt;img src ="http://blog.vckbase.com/bastet/aggbug/51380.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>mysql++的一个小秘密，</title><link>http://blog.vckbase.com/bastet/archive/2010/07/29/51153.html</link><pubDate>Thu, 29 Jul 2010 01:51:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/07/29/51153.html</guid><description>mysqlpp::Connection conn(false);&lt;BR&gt;就是设为不抛异常方式，&lt;BR&gt;就会有可能造成程序出错，所以还是使用异常吧。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/51153.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>EncodePointer,vc2010杂谈</title><link>http://blog.vckbase.com/bastet/archive/2010/07/20/50718.html</link><pubDate>Mon, 19 Jul 2010 22:57:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/07/20/50718.html</guid><description>在用vc2003ide+vc2010编译器的时候，可以编译，可以调试，只是碰到这两个函数编译不通过，于是搞了个假的实现。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;#define WIN32_LEAN_AND_MEAN&lt;BR&gt;#include &lt;windows.h&gt;&lt;BR&gt;extern "C"&lt;BR&gt;{&lt;BR&gt;	PVOID NTAPI EncodePointer(IN PVOID Pointer)&lt;BR&gt;	{&lt;BR&gt;		return Pointer;&lt;BR&gt;	}&lt;BR&gt;&lt;BR&gt;	PVOID NTAPI DecodePointer(IN PVOID Pointer)&lt;BR&gt;	{&lt;BR&gt;		return Pointer;&lt;BR&gt;	}&lt;BR&gt;}&lt;BR&gt;当然也不是没有真的实现。请看下面，&lt;BR&gt;&lt;BR&gt;00311 PVOID&lt;BR&gt;00312 NTAPI&lt;BR&gt;00313 RtlEncodePointer(IN PVOID Pointer)&lt;BR&gt;00314 {&lt;BR&gt;00315     ULONG Cookie;&lt;BR&gt;00316     NTSTATUS Status;&lt;BR&gt;00317 &lt;BR&gt;00318     Status = ZwQueryInformationProcess(NtCurrentProcess(),&lt;BR&gt;00319                                        ProcessCookie,&lt;BR&gt;00320                                        &amp;Cookie,&lt;BR&gt;00321                                        sizeof(Cookie),&lt;BR&gt;00322                                        NULL);&lt;BR&gt;00323     if(!NT_SUCCESS(Status))&lt;BR&gt;00324     {&lt;BR&gt;00325         DPRINT1("Failed to receive the process cookie! Status: 0x%lx\n", Status);&lt;BR&gt;00326         return Pointer;&lt;BR&gt;00327     }&lt;BR&gt;00328 &lt;BR&gt;00329     return (PVOID)((ULONG_PTR)Pointer ^ Cookie);&lt;BR&gt;00330 }&lt;BR&gt;00331 &lt;BR&gt;00332 /*&lt;BR&gt;00333  * @implemented&lt;BR&gt;00334  */&lt;BR&gt;00335 PVOID&lt;BR&gt;00336 NTAPI&lt;BR&gt;00337 RtlDecodePointer(IN PVOID Pointer)&lt;BR&gt;00338 {&lt;BR&gt;00339     return RtlEncodePointer(Pointer);&lt;BR&gt;00340 }&lt;BR&gt;javascript:{if%20(typeof(Page_ClientValidate)%20!=%20'function'%20||%20%20Page_ClientValidate())%20__doPostBack('Editor$Edit$lkbPost','')}&lt;BR&gt;现在问题在于如果链接到动态C库，他自然会引用kernel32.dll里的这个函数，这个基本上无解了，不过静态链接，这样就可以搞定了。&lt;BR&gt;微软在每个版本的vc里总会加些陷阱，这也算一个吧，vc2008的dll check manifest,secure stl之类的，一不小心就撞上。&lt;BR&gt;微软还天天吹他是为云计算用的，去他妈的云计算吧，产品越做越差，也不反思。&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/bastet/aggbug/50718.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>log4c的windows工程</title><link>http://blog.vckbase.com/bastet/archive/2010/07/18/50693.html</link><pubDate>Sun, 18 Jul 2010 01:06:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/07/18/50693.html</guid><description>log4c也是一个日志库，跟其他日志库相比，主要是用C写成的，编译成dll就可以到处用了，不像cpp写的，每个编译器，每个选 项都得重编译一次。&lt;BR&gt;缺点是appender不能chain,这个其实也容易，写些简单的函数就可以搞定了。&lt;BR&gt;&lt;BR&gt;地址是：&lt;BR&gt;http://blog.vckbase.com/Files/BastEt/log4cproj.zip&lt;BR&gt;&lt;BR&gt;我想有空加些功能上去。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/50693.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>替换boost.asio的投递内存分配器</title><link>http://blog.vckbase.com/bastet/archive/2010/06/15/48313.html</link><pubDate>Tue, 15 Jun 2010 10:06:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/06/15/48313.html</guid><description>简单的讲，其实你每次io_service.post的时候，其实是创建一小块内存，把那个函数对象copy进去，然后在线程里面取出那块内存，再把那块内存删除，这里要是数量大，有可能会有些效率问题。&lt;BR&gt;&lt;BR&gt;做法：&lt;BR&gt;1、删除handler_alloc_hook.hpp中的那两个函数的实现。&lt;BR&gt;&lt;BR&gt;2、假如你不想自己写内存分配器，可以使用nedmalloc&lt;BR&gt;&lt;BR&gt;#include &lt;nedmalloc.h&gt;&lt;BR&gt;namespace boost &lt;BR&gt;{&lt;BR&gt;	namespace asio &lt;BR&gt;	{&lt;BR&gt;		void* asio_handler_allocate(std::size_t size, ...)&lt;BR&gt;		{&lt;BR&gt;			return nedmalloc(size);&lt;BR&gt;		}&lt;BR&gt;		void asio_handler_deallocate(void* pointer, std::size_t size, ...)&lt;BR&gt;		{&lt;BR&gt;			(void)(size);&lt;BR&gt;			nedfree(pointer);&lt;BR&gt;		}&lt;BR&gt;	}&lt;BR&gt;}&lt;BR&gt;在你的cpp里加上上面的代码即可。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/48313.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>boost asio的投递多个accept的问题</title><link>http://blog.vckbase.com/bastet/archive/2010/06/15/48312.html</link><pubDate>Tue, 15 Jun 2010 09:10:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/06/15/48312.html</guid><description>投递accept的线程别关闭，最好在工作线程中投递。否则有可能会出问题。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/48312.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>语言之争的本质是计算机科学专业细分的结果。</title><link>http://blog.vckbase.com/bastet/archive/2010/05/03/41890.html</link><pubDate>Sun, 02 May 2010 23:36:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/05/03/41890.html</guid><description>在程序员这里，语言之争是个永恒的话题，而且如同信仰一样，永远不会有结果和对象。&lt;BR&gt;&lt;BR&gt;从实质来说，我个人认为这个是计算机科学发展、专业细分的必然结果&lt;BR&gt;&lt;BR&gt;我举个简单的例子来说明这点：&lt;BR&gt;&lt;BR&gt;在很久以前，瓦特造出了一部蒸汽机，他得对这台机器的所有的地方都很熟悉，都很了解，他需要熟悉造这个机器的各种各样的知识。&lt;BR&gt;&lt;BR&gt;而现在，已经可以有专门的设计人员（他可以不懂具体的制造），有专门的制造各种零部件（他们就是根据零部件需要进行生产，他们甚至可以不懂蒸汽机），最后有的人再来组装一下，这些人只会组装，为什么这么装他们也不知道。&lt;BR&gt;&lt;BR&gt;这就是社会分工的威力，让我们的效率大大的提升，我们每个人不需要掌握所有的全部，只需要精通自己被安排或者自己所选择的那一部分，并且成为这一部分的专家就可以了。&lt;BR&gt;要是还有人想了解所有的，掌握所有的，除非是天才，不然后果就是他啥也不精通。&lt;BR&gt;&lt;img src ="http://blog.vckbase.com/bastet/aggbug/41890.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>vs2010的一个EWOULDBLOCK的郁闷事情。(所有想在vc2010下写网络程序的可能都得关注一下）</title><link>http://blog.vckbase.com/bastet/archive/2010/05/02/41885.html</link><pubDate>Sun, 02 May 2010 14:46:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/05/02/41885.html</guid><description>原文转自：&lt;BR&gt;http://acejoy.com/bbs/viewthread.php?tid=2154&amp;extra=page%3D1&lt;BR&gt;&lt;BR&gt;modern&lt;BR&gt;版主&lt;BR&gt;Rank: 7Rank: 7Rank: 7&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;UID 544&lt;BR&gt;精华 1&lt;BR&gt;积分 365&lt;BR&gt;帖子 325&lt;BR&gt;威望 365&lt;BR&gt;金钱 365&lt;BR&gt;ACEJOY 366&lt;BR&gt;阅读权限 100&lt;BR&gt;注册 2008-6-13&lt;BR&gt;状态 离线&lt;BR&gt;	&lt;BR&gt;#1&lt;BR&gt;使用道具  &lt;BR&gt;发表于 2010-4-30 10:48  资料  个人空间  短消息  加为好友 &lt;BR&gt;ACE5.7.8在vs2010正式版下不可用&lt;BR&gt;&lt;BR&gt;不解释了，下面的转的一段话说得比较清楚了。&lt;BR&gt;It says that you can #define errno WSAGetLastError() and has the following example:&lt;BR&gt;r = recv(...);&lt;BR&gt;if (r == -1     /* (but see below) */&lt;BR&gt;    &amp;&amp; WSAGetLastError() == EWOULDBLOCK)&lt;BR&gt;    {...}&lt;BR&gt;This code will NOT work in VS2010 because EWOULDBLOCK is 140 and WSAEWOULDBLOCK is 10035L.&lt;BR&gt;Some popular libraries like openssl are now broken because of this.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;只要有涉及这类代码的都得改一下才行了，太郁闷 了，好不容易才把那个sb的manifest去掉，又出这些玩意儿了。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/41885.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>有关flash和苹果，微软大战的一些想法。</title><link>http://blog.vckbase.com/bastet/archive/2010/05/02/41883.html</link><pubDate>Sun, 02 May 2010 11:11:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/05/02/41883.html</guid><description>表面上都说啥技术，啥标准原因，其实实质原因都是商业因素。&lt;BR&gt;&lt;BR&gt;苹果不肯开放flash,是因为flash本身也可以开发各种应用，直接跟app sotre会相冲突，而且以前确实adobe也有过flash app store。&lt;BR&gt;至于微软更不用说了，sliverright推广得不成功，flash的太过于成功也是一个原因。&lt;BR&gt;&lt;BR&gt;微软和苹果本来不是朋友，但敌人的敌人就是朋友，所以这次在flash事件中走到一起也不为奇。&lt;BR&gt;&lt;BR&gt;google会是什么态度？脚踏多只船吗？我们后面看吧。google搞不好会跟flash结成同盟，原因是google的app store数目还不够多，想要很快超越iphone,直接移植flash相当于一下子增加一个数量级的应用程序，而且google的主要用意是占领所有的搜索，而未必是iphone的app store赚钱。从这方面来看，google和flash没有最根本的矛盾。而且基于微软也在对gphone的一些东东进行起诉，对flash来说，敌人的敌人就是朋友，google也许会是flash拉拢的对象，但话说回来，google长远规划不会让自己的东东受制于人，对google来说，最好的结果是大家的搜索都用他的，而其他的都用开源的，这样也能达到消灭敌人的目的。&lt;BR&gt;&lt;BR&gt; 不过个人认为目前在pc平台，微软的那玩意儿还不能跟flash对抗，微软现在的官僚体制决定了他不能创新，也不会有大的变革，程序员对产品也不像以前那么热爱（工业化生产最后都会这样）。&lt;BR&gt;&lt;BR&gt;如果说vs2003,vc2008的设计人员还是想认真的设计产品的话，vs2010大量使用wpf也许就是为了做一个杀手级应用，而不是真正的用户需要（wpf本来就是为了很眩的界面用的，vs2010眩吗？跟vs2008的界面的美观方面有多大优势呢？）&lt;BR&gt;&lt;BR&gt;几年前我就在说微软在走下坡路，msn的产品和程序设计就是微软内部的一个缩影罢了。&lt;BR&gt;而很奇怪的是微软应该在公关方面花的钱比以前更多了，这个变化很奇怪。而以前像vc6,vc2003那种非技术的公关应该比较少。&lt;BR&gt;&lt;BR&gt;微软在若干年后会成为若干年前的ibm.我私下里这么认为。&lt;BR&gt;&lt;BR&gt;以上皆为个人瞎说，如果涉及法律纠纷，请PM本人，本人会在第一时间删贴、倒歉，其实本人不识字。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/41883.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Diviner</dc:creator><title>wxwidgets用xml来描述界面，在程序里获取 变量和事件。</title><link>http://blog.vckbase.com/bastet/archive/2010/05/02/41882.html</link><pubDate>Sun, 02 May 2010 11:00:00 GMT</pubDate><guid>http://blog.vckbase.com/bastet/archive/2010/05/02/41882.html</guid><description>如果对界面美观程序比较高，手写代码是不可避免的。&lt;BR&gt;但如果做的是一些像只是为了显示、控制之类的程序，可能更快的把程序捣鼓出来就好了。&lt;BR&gt;wxwidgets有这样的一个功能，就是能用xml写成界面就能显示&lt;BR&gt;编辑xrc的工具是wxformbuilder,开源免费的，也足够用了，我一开始没找到怎么生成xrc,后来某次偶然看到了下面....原来有c++,py,xrc的生成。&lt;BR&gt;&lt;BR&gt;wxwidgets里有个例子，叫xrcdemo&lt;BR&gt;大体是是这样。&lt;BR&gt;平时创建wxwidgets程序，我们一般用wxframe,wxdialog&lt;BR&gt;拿wxframe来举例，我们一般从wxfrrame派生，然后在初始化函数里创建控件。&lt;BR&gt;MyFrame::MyFrame(wxWindow* parent)&lt;BR&gt;{&lt;BR&gt;    wxXmlResource::Get()-&gt;LoadFrame(this, parent, wxT("main_frame"));&lt;BR&gt;}&lt;BR&gt;而现在只要调用这一句就够了。&lt;BR&gt;事件处理方面也有所变动。&lt;BR&gt;BEGIN_EVENT_TABLE(MyFrame, wxFrame)&lt;BR&gt;    EVT_MENU(XRCID("unload_resource_menuitem"), MyFrame::OnUnloadResourceMenuCommand)&lt;BR&gt;    EVT_MENU(wxID_ABOUT, MyFrame::OnAboutToolOrMenuCommand)&lt;BR&gt;END_EVENT_TABLE()&lt;BR&gt;&lt;BR&gt;获得相关的控件：&lt;BR&gt;wxAnimationCtrl *ctrl = XRCCTRL(*win, "controls_animation_ctrl", wxAnimationCtrl);&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;加载xml的地方一般在app::init里面，像这样子&lt;BR&gt;wxXmlResource::Get()-&gt;InitAllHandlers();&lt;BR&gt;    // Load all of the XRC files that will be used. You can put everything&lt;BR&gt;    // into one giant XRC file if you wanted, but then they become more&lt;BR&gt;    // diffcult to manage, and harder to reuse in later projects.&lt;BR&gt;    // The menubar&lt;BR&gt;    if (!wxXmlResource::Get()-&gt;Load(wxT("rc/menu.xrc")))&lt;BR&gt;        return false;&lt;BR&gt;现在还有个问题，就是缺省对中文支持不好，这个我明天来想个办法。&lt;img src ="http://blog.vckbase.com/bastet/aggbug/41882.html" width = "1" height = "1" /&gt;</description></item></channel></rss>