‘C/C++’ 分类的存档

RtlCaptureContext可以用来获取调用者的线程环境结构CONTEXT,但有个很重要的前提,就是调用者必须是bp-based frame的函数,所谓的bp-based frame,就是指函数开头有push ebp/mov ebp, esp指令,如果调用者不是bp-based frame的,则RtlCaptureContext有可能产生0xC0000005异常而使程序退出,这取决于调用者的ebp值,看看RtlCaptureContext的实现就知道了: @RtlCaptureContext: push ebx mov ebx, dword ptr [esp+8] mov dword ptr [ebx+B0], eax mov dword ptr [ebx+AC], ecx mov dword ptr [ebx+A8], edx mov eax, dword ptr [esp] mov dword ptr [ebx+A4], eax mov dword ptr [ebx+A0], esi mov dword ptr [ebx+9C], edi jmp short @L00000001 mov edi, edi push ebx [...]

2010年6月30日14:38 | 1 条评论
分类: C/C++
标签:

今天发现的,测试VS2010简中版存在此BUG。 // vcpkgsrv.exe无限循环崩溃测试 // // 把下面的代码粘贴到任意.h或者.cpp里, // 等VS2010分析完文件,vcpkgsrv.exe将会崩溃退出, // 然后VS2010会重新启动vcpkgsrv.exe,接着继续崩溃 class A { public: virtual void test() {} }; class B : public A { public: // 这里不小心少写了个void,然后vcpkgsrv.exe就崩溃了 virtual test() {} };

2010年6月9日19:57 | 7 条评论
分类: C/C++
标签:

这份源代码来源于RFC1321文档 – The MD5 Message-Digest Algorithm的附录,应该是最官方的源代码了吧,可用于C、C++,可用于内核驱动。 一份测试代码:

2010年5月23日15:47 | 没有评论
分类: C/C++
标签: , ,

property tree库没更新,所以在VS2010中依然不能编译通过,具体请看:http://www.sunyzl.cn/?p=278。 我从Boost官方SVN中导出了一份最新的property tree库代码,Revision为61639,用这些文件覆盖boost_1_43_0\boost\property_tree下的文件即可用VS2010编译通过。 下载: http://www.brsbox.com/filebox/down/fc/e8f21aa48c34289a9041a6734b472a3b

2010年5月7日20:00 | 2 条评论
分类: C/C++
标签:

VS2010中改变了原有C++ auto关键字的意义,默认情况下,可以把VS2010中的auto看作一种新的数据类型,可以用来定义变量,用auto关键字定义的变量可以保存任意类型的数据,而变量的实际类型由编译器在编译时通过初始化表达式来推测,auto的这个特性用来简化冗长的变量定义最合适不过了,举个简单的例子: #include <iostream> #include <string> #include <map>   using namespace std;   int main() { map<int, string> m;   // 一般情况下,需要编写冗长的迭代器定义代码 for (map<int, string>::const_iterator it = m.begin(); it != m.end(); ++it) { cout << it->second << endl; }   // 使用auto关键字则可以大大简化代码 for (auto it = m.begin(); it != m.end(); ++it) { cout << it->second [...]

2010年4月26日23:21 | 1 条评论
分类: C/C++
标签: , ,

boost\property_tree\detail\ptree_implementation.hpp文件在VS2010正式版中无法编译通过,第30行有错误: error C2440: ‘specialization’ : cannot convert from ‘const std::string std::_Pair_base<_Ty1,_Ty2>::* ‘ to ‘const std::basic_string<_Elem,_Traits,_Ax> std::pair<_Ty1,_Ty2>::* ‘ 这个错误在VS2010 Beta2中就存在了,具体请看:https://svn.boost.org/trac/boost/ticket/3594 解决方法: 到Boost官方下载最新的ptree_implementation.hpp文件: https://svn.boost.org/trac/boost/browser/trunk/boost/property_tree/detail/ptree_implementation.hpp 先尝试用最新的ptree_implementation.hpp编译一次,如果编译不过,就用下面我提供的ptree_implementation.hpp文件,此文件来源于Boost官方SVN Revision 59734,原文件修正了VS2010 Beta2的编译错误问题,但在VS2010正式版下依然有问题,所以我添加了一行代码以修正此问题,具体请看源文件第22行。 Download:

2010年4月21日09:58 | 1 条评论
分类: C/C++

VS2010正式版不再有单独的MSDN Library安装选项,以至于很多同学找不到本地的MSDN Library来用,其实VS2010的ISO安装光盘里已经包含有MSDN Library,只不过要手动安装,方法如下: 1、安装完VS2010后,在开始菜单中打开Microsoft Visual Studio 2010 - Visual Studio Tools – Manage Help Settings,第一次打开时会让你选择一个路径用于保存MSDN Library的内容,建议选择一个剩余空间比较大的盘 2、点击“Choose online or local help”,然后选“I want to use local help” 3、点击“Install content from disk”,然后选择VS2010安装光盘下的ProductDocumentation\HelpContentSetup.msha文件 4、点击“Add”选择你要安装的MSDN Library内容,然后点OK就开始安装了 5、(可选)点击“Check for updates online”可以在线更新本地MSDN Library文档为最新的内容。 VS2010中不在叫MSDN Library,而叫Help Library,在VS2010里按F1即可打开Help Library,第一次打开时会额外运行一个Help Library Agent进程,然后调用默认浏览器打开Help Library。没错,Help Library已经改为Web方式,而且没有了索引,只能靠搜索或者一层层节点去点开来查找,还好我在以前的MSDN Library中经常喜欢用同步功能,基本上哪类API在哪个位置都能很快找到,要不然可真是要命了。

2010年4月19日01:48 | 3 条评论
分类: C/C++

转载请注明来源:http://www.sunyzl.cn/?p=275,谢谢。 for each语法即方便自然,可读性又好,很多语言都有这种语法,包括PHP、Python、C#等等,甚至包括C++ CLI都有,悲剧的是C++ 03标准中木有,于是我们只能使用更加悲剧的std::for_each算法。 先看看C#中的for each: int[] iArray = new int[] {1, 2, 3}; foreach (int i in iArray) System.Console.WriteLine(i); 简洁、干净。 再来看看C++怎么迭代一个容器:

2010年4月18日00:23 | 没有评论
分类: C/C++
标签: , , , , ,