ReadToc(CString Filename)
首先从文件尾反向Seek一个strlen(文件标志)的距离,然后读取文件标志,判断此文件标志.错误即返回INVALID_SIG.
然后再从文件尾反向Seek一个strlen(文件标志)+sizeof(int)的距离,读取一个整数,此整数代表文件数量.当其为0,即返回NOTHING_TO_DO,
然后根据文件数量,循环依次反向的Seek,读取文件名长度,文件名,文件长度,文件在文档中的偏移值.将各文件的信息保存在m_InfoArray数组中,将最后得到的偏移值,保存在m_nTOCSize中,此偏移值即整个文档头的大小.
阅读全文....
23章
结束处理程序
__try{} __finally{}块语句,能保证在运行完__try的语句后能调用__finally{}块中的语句,就算是提前的return,break,continue,goto, 内存访问违规等都可以保证,但是当调用ExitThread或ExitProcess时,将立即结束线程或进程,由于调用TerminateThread或TerminateProcess而结束线程或进程,不会执行__finally块中的代码。
但是在__try块过早退出时,会导致局部展开,影响效率,应该尽量放在外面。
当碰到一些的确需要在块内部使用return时,可以先用__leave关键字代替,以直接从__try块转到__finally,并在最后调用return语句返回,这样避免了局部展开,提高了效率,但是额外的代价是需要加入一个表示函数成功完成的bool变量。
可以在__finally块中调用AbnormalTermination内部函数确定是否是非正常退出__try块,发生局部展开和内存访问违规等都算在内,此时返回true,当自然进入__finally块时,此函数返回false。可以通过这种方式决定到底在__finally块中执行什么代码。不能在其它地方调用。
此结束处理程序的作用:
简化错误处理,提高程序可读性,使代码更容易维护,使用得当具有很小的系统开销。
阅读全文....
读取文件流程:
- 用要打开文档的文件名调用SFileOpenArchive()函数打开文档,得到打开文档的句柄.
- 用上步得到的文档句柄,和要打开的文件名调用SFileOpenFileEx()函数,得到打开的文件句柄.
- 用上步得到的文件句柄,调用SFileReadFile()函数,读取数据.
- 关闭文件,文档句柄.
阅读全文....
MPQ文档布局分析(以暗黑破坏神2的一个补丁patch_d2.MPQ和燃烧远征的一个补丁patch-2.MPQ文档为实例,以下简称D2,P2)
说明:因为MPQ实际上是由很多文件数据组成,包含很多文件,为了区别好MPQ文件与一般文件,这里将MPQ文件在作为一个集合的时候称为文档(ARCHIVE),表示实际存储在硬盘上的一个文件时称为MPQ文件(file),而文件都指保存于MPQ中的一般文件.
说明2:intel x86系统的存储格式都是低位在前(Little-endian),比如一个int32型的数据44(00 00 00 2Ch)存储在文件和内存中实际为2C 00 00 00h,下面不再说明.
说明3:以下以[]后缀中表示此类型一共重复几次,以()前缀表示一个此类型所占字节数.比如(1)char[4]表示此处有4个1个字节的char类型数据.
说明4:本文主要信息来自The MoPaQ File Format 1.0.txt,只是附带个人结合D2,P2后的分析,因为会经常提到原文件,以后简称其为MFF.另外也经常会提到http://www.zezula.net/en/mpq/mpqformat.html一文,简称为MFH.
说明5:在一段文本的开头的十六进制数字都表示文件中的偏移地址,在段中,都以offset +十六进制数字说明此处表示在原文件的偏移地址.
阅读全文....
本文通过汇编代码,剖析了C++函数调用的全过程,包括参数如何传递、函数如何使用栈以及如何返回。
阅读全文....
只需要在任何异常前正常创建一个ExceptionHandler类的成员函数,就可以完成异常的捕捉及dump.
在创建ExceptionHandler时,第一参数为宽字符表示的dump存储路径,第二参数为dump前客户需要运行的程序,程序原型应该为
阅读全文....
Breakpad在进程中完成dump的流程描述
阅读全文....
问题很简单,就是因为缺乏支持库,这里给大家几个建议,因为我的程序是在VS2005+sp1编译的,所以需要它特别的支持库,可以在以下地址找到下载,文件名为vcredist_x86.rar,另外,也有可能是因为.NET的支持库问题,目前我没有碰到,因为我的程序好像也没有用到.NET的特性.假如有需要的,可以到微软的网站去下载,另外,当然你可以直接下我的源代码,然后重新编译.
http://groups.google.com/group/jiutianfile/files
最后,本来我可以重新用静态链接的方式编译的……但是,还是推荐你们安装以上文件比较一劳永逸.不然我每个编译出来的程序都要大一块.
当然,你不想从我给的地址下载,也可以在微软的网站去搜搜,
全名叫
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
阅读全文....
初到北京,适应了一下,好久没学习了(大概一周多),重新开始学学。
严蔚敏的数据结构(C语言版),第一个介绍的数据结构是一个三元结构,她命名为Triple,她用类C伪码描述的。我自己用C++实现了一下。这里想说说感受。先看我写的源代码:
阅读全文....
Windows中多指针输入技术的实现与应用(8 总结及继续MFC的讨论)
5 结论和目前各实现的不足
本文通过几种目前国外常用的多鼠标控制输入实现方法的比较,分析了各种方法的优劣,并给出使用建议。最后简单介绍了本文得出的综合性能最佳的SDG Toolkit具体使用方法。本文希望通过对此技术两种实现方法原理的详细介绍,各种实现方法的简单介绍,和对SDG Toolkit具体使用方法的简单介绍,可以让人了解并可以在更多多指针输入技术有优势的相关的软件中使用此技术。
阅读全文....