自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

oathevil的专栏

夢,是抹不掉的記憶……

  • 博客(33)
  • 资源 (3)
  • 收藏
  • 关注

原创 error LNK2005:

<br /> <br />1. error LNK2005: "public: __thiscall CString::operator char const *(void)const " (??BCString@@QBEPBDXZ) already defined in Markup.objSolution:Project Settings -> C/C++,  Categories : Code generation -> Use run-time library: MultiThreaded 改为 D

2010-08-11 18:56:00 1502

原创 关于error C2079: 'a' uses undefined class 'A'

<br />在a.h中有: <br /> <br />class A{<br />...<br />}<br /> <br />类A对应的实现部分在 a.cpp中<br /> <br /> <br />在b.h中有:<br /> <br />class A;<br /> <br />class B{<br />...<br />...<br />A a;   /* 错误 */<br />}<br /> <br />其实现文件b.cpp中:<br />#include "b.h"<br />#include

2010-08-11 18:44:00 5556

转载 VC中CPropertySheet 属性对话框

<br /> <br />关键词: PropertySheet                                          <br />首先要了解的是CPropertySheet实际上是由一个TabCtrl加多个Page和多个按钮组成<br />这里强调一点,DoModal的时候并没有把所有的PAGE都创建出来,只有在SetActivePage的时候才创建<br />所以如果你初始化的代码在OnInitDialog,那么刚开始最好先用SetActivePage切换一下<br /

2010-08-10 14:32:00 930

原创 深入了解MFC中的文挡/视结构 (摘录)

MFC调用命令处理程序以响应发生在应用程序中的事件。命令发送的优先级是:              活动的视图->框架窗口->文档->应用程序->默认窗口过程(DefWindowsProc)如果文档数据发生了变化,则所有的视都必须被通知到,以便它们能够对所显示的数据进行相应的更新。Cdocument::UpdateAllViews函数即可完成此功能。当该函数被调用时,派生视类的CView::OnUpdate函数被触发。通常OnUpdate函数要对文档进行访问,读取文档数据,然后再对视的数据成员或控制进行更新

2010-08-10 14:30:00 674

转载 VC的若干实用小技巧 (如何干净的删除一个类)

<br />Visual C++6.0(5.0)开发工具功能非常强大,但是对于初学者来说,却有很多细节的问题需要注意。作者搜集整理了以下一些实用小技巧,希望对初学者有所帮助。 <br /><br />  1:使用vc开发项目时,常会遇到这种情况: <br />    即明明只改动了一个文件,却要把整个项目全部重新编译连接一次。刚刚连接好,一运行,又提示重新编译连接一次,非常讨厌。这是因为出现了未来文件的缘故。 <br />    解决方法: <br />    找出对应文件夹下的debug目录,将未来文件全

2010-08-09 23:38:00 795

原创 走出MFC子类化的迷宫:子类化,SUBCLASSWINDOW ,MFC消息机制

<br /> <br />  许多Windows程序员都是跳过SDK直接进行RAD开发工具[或VC,我想VC应不属于RAD]的学习,有些人可能对子类化机制比较陌生。   <br />     我们先看看什么是Windows的子类化。Windows给我们或是说给它自己定义了许多丰富的通用控件,如:Edit、ComboBox    、ListBox……等,这些控件功能丰富,能为我们开发工作带来极大方面,试想:我们单单是自己实现一个EDIT控件是多么的艰难!但是,在实际开发中还是有些情况这些标准控件也无能为力,比

2010-08-09 22:15:00 613

转载 VC++6.0使用CSplitterWnd类分割窗体,拆分窗体

<br /><br /> <br />晚上一个QQ技术群中的人提出了一个比较尖锐的问题,其尖锐性并不是在于难度,而是复杂度,分割窗体,也叫拆分窗体,这个问题还是值得仔细去研究一番的,下面切入正题。因为比较复杂,所以这个问题我会讲的很细致,基本是带着做下来。<br />我们在使用WINDOWS的资源管理器的时候都会注意到,他是由左右两部分组成,这就是分割窗体,那么现在我们就来给大家讲一下如何拆分窗体,而且是想怎么拆就怎么拆。以上图的三分窗体为例。(三分会用了,多分就会了)。<br />多说一句,为了更加直观的

2010-08-09 13:16:00 1617

转载 Enable CDialogBar 中的按钮

<br />DialogBar 控件的行为类似于上一个工具栏位图。它们可以启用或禁用通过手动添加适当的类 (如 CMainFrame) 的消息映射中的一个 ON_UPDATE_COMMAND_UI。分步示例加入DialogBar,如与资源 ID 的 IDC_BUTTON1 按钮上的控件后可使用以下步骤管理控件的状态:<br /><br />在类的声明,添加处理程序函数的声明: afx_msg void OnUpdateButton1(CCmdUI* pCmdUI); 类的实现内,

2010-08-09 11:34:00 821

转载 vc++6.0中AppWizard生成的应用程序框架分析(下)

<br /> 在第七讲中,我们大致了解了一下AppWizard生成的单文档程序框架中各个类的功能与特点,并且已经知道文档类、视类和主框架类之间存在着紧密的联系,在本讲之中,心铃准备详细讨论一下这种联系,以便让大家对MFC程序的文档/视图结构形成有一个初步的概念,不过大家先要有点思想准备,比较难哦。l          文档模板我们在上一讲中已经知道,在APP类的InitInstance()成员函数中有如下一段代码,其作用是为程序定义一种文档模板类型,而文档模板把文档类、主框架类和视类联系在一起。CSingl

2010-08-09 10:50:00 888

转载 vc++6.0中AppWizard生成的应用程序程序框架分析(上)

<br />l          标准头文件StdAfx.h在第六讲中我们已经提到了StdAfx.h,它是构成预编译头文件的主体,现在我们就来仔细看看其中的一些语句。在FileView的“Header Files”下面找到StdAfx.h并打开它,我们可以看到几行注释下面的前六行都是编译指令,其中头两条指令用来确保StdAfx.h在同一个模块中只被包含一次,其它头文件中也有类似的语句,接下来三条指令请大家自己在MSDN库中查一下“_MSC_VER”及“#pragma once”的含义,第六条指令定义了一个符

2010-08-09 10:49:00 1618

转载 一位同行工作6年的总结

<br />                                      空间当硬盘用好了,保存一篇文章。<br />正确地做事与做正确的事同样重要 <br />一位软件工程师的6年总结 <br />作者:成晓旭 <br />(声明:欢迎转载,请保证文章的完整性) <br /><br />“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作 6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,

2010-08-09 10:48:00 586

转载 error LNK2001: unresolved external symbol解析

<br /><br />如果在 ATL 组件程序中调用了 CRT 的运行时刻库函数,比如开平方 sqrt() ,那么编译的时候可能会报错“error LNK2001: unresolved external symbol _main”。怎么办?下面方法中的任何一个都可以纠正这个错误:<br />?         去除_ATL_MIN_CRT这个预处理符号;<br />?         打开stdafx.cpp,注释掉#include <atlimpl.cpp>这句话,然后编译,即可;<br />====

2010-08-07 16:33:00 810

转载 error LNK2005: _DllMain@12 already defined in MSVC

<br />编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。   <br />    <br />  造成LNK2005错误主要有以下几种情况:   <br />  1.重复定义全局变量。可能存在两种情况:   <br /> A、对于一些初学编程的程序员,有时候会以为需要使 用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int   g_Tes

2010-08-07 12:46:00 480

原创 2010-08-07

<br /> <br />    真的是想不到, 平时一些我认为非常简单的小问题(#include, extern, 变量的声明与定义等)也可以让我为此付出<br /> <br />一个通宵 ... <br /> <br />    反省,  反省....<br /> <br /> <br /> <br />2010-08-07 06:03:24<br /> 

2010-08-07 06:04:00 437

转载 编译器处理相关 [精]

一.预处理器-编译器-汇编器-链接器预处理器会处理相关的预处理指令,一般是以”#”开头的指令。如:#include “xx.h” #define等。编译器把对应的*.cpp翻译成*.s文件(汇编语言)。汇编器则处理*.s生成对应的*.o文件(obj目标文件)最后链接器把所有的*.o文件链接成一个可执行文件(?.exe)1.部件:首先要知道部件(可以暂且狭义地理解为一个类)一般分为头文件(我喜欢称为接口,如:*.h)及实现文件(如:*.cpp)。一般头文件会是放一些用来作声明的

2010-08-07 06:00:00 449

原创 类函数成员地址的注意问题 [**]

<br />由于类函数成员默认情况下为__thiscall调用约定, 故很多东西受到限制.<br /> <br />如在取得类函数成员地址的时候, 也不能轻易调用类函数成员, 这将导致函数参数被不正确地传递。<br /> <br />在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对<br /> <br />成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用

2010-08-06 03:17:00 681

转载 C++ Primer 之 读书笔记 第十二章

<br /><br />Classes12.1. 类的定义和声明 Class Definitions and Declarations类定义<br />大师仅仅写了这么一个类定义的简单的例子,却有这么多的东西可以说说啊<br />class Sales_item {<br />public:<br />    // operations on Sales_item objects<br />    double avg_price() const;<br />    bool same_isbn(const

2010-08-06 01:41:00 738

转载 直接调用类成员函数地址 **

<br /> <br />作者:南风<br />下载源代码<br />摘要:介绍了如何取成员函数的地址以及调用该地址.<br />关键字:C++成员函数 this指针 调用约定<br />一、成员函数指针的用法<br />  在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用于指针的声明,而"->*"和".*

2010-08-06 00:39:00 635

转载 STL map常用操作简介

<br /> <br />1。目录map简介map的功能使用map在map中插入元素查找并获取map中的元素从map中删除元素<br />2。map简介<br />map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。<br />3。map的功能自动建立Key - value的对应。key 和 value可以是任意你需要的类型。根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个

2010-08-05 23:45:00 441

转载 c++中的string常用函数用法

<br /><br />basic_string::append<br />      向string 的后面加字符或字符串。(比+=, push_back 更灵活)<br />(1)向string 的后面加C-string<br />basic_string& append( const value_type* _Ptr );<br />string s ( "Hello " ); // s=”Hello ”<br />const char *c = "Out There ";<br />s.append

2010-08-05 21:28:00 431

转载 编译器是如何进行宏替换的?

有时,我们在看比较复杂的宏替换时,搞不清楚编译器到底把宏给替换成什么code了。还有时,我们在看文件时,由于文件中太多的#if …#esle…#endif,我们反而不知道程序到底走那个分支。那么,我们可以在编译选项里面加入 /P 的选项,这时,编译器会帮我们生产相应cpp文件的i文件。如 test.cpp -- test.i。这样,我们打开相应的.i文件就可以看到编译器替换后的文件内容。凡是有宏的地方都会被替换成相应的数值。vc中加入/P 的方法。工程—设置 – C++ – 常规在

2010-08-05 02:33:00 703

转载 PE知识学习(一)

<br />PE知识学习(一)<br /><br />PE 文件的知识是基本的知识.网上有很多这方面的资料.然而系统讲解的却不多.我不是这方面的专家,却希望能抛砖引玉,得到这方面的一些指点.<br /><br />计算机这门科学是实践性很强的一门学问,如果想扎扎实实的学会点东西,还是要亲自动手试一试.<br />在继续向下看之前,我假定你会基本的C语言和简单的使用VC6.0,以下的例子都用用到这些.除此之外,不再做任何假设.<br />关于pe的一些结构可以在winnt.h这个头文件里找到.<br /><b

2010-08-04 12:44:00 643

转载 PE知识学习(二,三)

<br />PE知识学习(二)<br /><br /><br />上一贴我们了解了pe头部的dos部首部分,我们知道在这个结构里e_magic和e_lfanew这两个域对我们来说很重要.同时我们也提到了e_lfanew域指向IMAGE_NT_HEADERS32结构在pe文件的偏移.<br />补充声明一下:这里的知识是适用于32位字的机器上的.<br /><br />下面我们接着看IMAGE_NT_HEADERS32结构,这个部分在pe文件的学习里至关重要.<br /><br />IMAGE_NT_HEAD

2010-08-04 12:42:00 683

转载 PE知识学习(六,七)

<br />pe知识学习(六)<br /><br /><br />有输入表就有输出表,本贴开始介绍输出表.<br /><br />大部分dll都会输出一些函数.有些pe文件也会有输出表.通常输出表都是放在.edata区段的.因此.edata区段的注要成分是函数名表,入口点地址,输出函数的序号.<br />输出表的开始部分是一个IMAGE_EXPORT_DIRECTORY结构,之后紧接着是由该结构中的某个域所指向的数据.<br />IMAGE_EXPORT_DIRECTORY结构定义如下:<br /><br

2010-08-04 12:41:00 535

转载 PE知识学习(四,五)

<br />pe知识学习(四)<br /><br /><br />首先在这里感谢laoxuetong的支持,没有你我可能不会继续写下去了.<br /><br />下面我们要学习的可以说是pe文件的核心内容了.即块表(section table)和各种块(区段)的结构.这些内容比较多且长.因此我会把写完的先发出来,然后在慢慢的续完.希望你有耐心看下去.学习有时是很枯燥的.因此在适当的时候我也会给出点应用的实例.<br /><br />你可能还记得,区块的数量在IMAGE_FILE_HEADER结构的Numbe

2010-08-04 12:41:00 584

转载 Import Table(引入表)

<br />文/Iczelion 译/GuFeng本课我们将学习引入表。先警告一下,对于不熟悉引入表的读者来说,这是一堂又长又难的课,所以需要多读几遍,最好再打开调试器来好好分析相关结构。各位,努力啊!下载范例。理论:首先,您得了解什么是引入函数。一个引入函数是被某模块调用的但又不在调用者模块中的函数,因而命名为"import(引入)"。引入函数实际位于一个或者更多的DLL里。调用者模块里只保留一些函数信息,包括函数名及其驻留的DLL名。现在,我们怎样才能找到P

2010-08-04 12:22:00 1757 1

原创 VA、RVA、RAW是什么及其区别

<br />对于Raw的理解,   习惯上人们喜欢叫它为 "对齐 "了的什么什么,   但是这样反而增加了理解上的难度,   其实它的意思就是文件中的地址或长度.比如: <br />SizeOfRawData           :0x200     ->   表示本节在文件中占了0x200字节 <br />PointerToRawData     :0x400     ->   表示本节在文件中的偏移量是0x400 <br /><br />对于VA和RVA,   表示一个PE文件被加载到内存中之后的地址.

2010-08-03 22:51:00 8151 2

转载 VA

<br /> <br />对于Raw的理解,   习惯上人们喜欢叫它为 "对齐 "了的什么什么,   但是这样反而增加了理解上的难度,   其实它的意思就是文件中的地址或长度.比如: <br />SizeOfRawData           :0x200     ->   表示本节在文件中占了0x200字节 <br />PointerToRawData     :0x400     ->   表示本节在文件中的偏移量是0x400 <br /><br />对于VA和RVA,   表示一个PE文件被加载到内存

2010-08-03 22:50:00 800

转载 LPTSTR、LPCSTR、LPCTSTR、LPSTR的含义

<br /><br />UNICODE:它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字,据统计,用两个字节可以编 现存的所有文字而没有二义。    <br />    <br />MBCS,它是多字节字符集,它是不定长表示世界文字的编 。MBCS表示英文字母时就和ASCII一 (这也是我们容易把MBCS和A

2010-08-02 21:37:00 491

转载 VC++ Tab Control控件的使用

<br /> 1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish.<br />2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.<br />3. 在对话框的初始化函数O

2010-08-02 12:50:00 414

转载 用Debug函数实现API函数的跟踪(3)

<br /><br />很明显,当被调试进程在函数入口产生中断调试信息时,调试程序只能得到函数的输入参数,而不能得到我们希望的输出参数及返回值!为了实现我们的目标,我们必须在函数调用结束时,再次产生中断,取得函数的输出参数和返回值。在处理函数入口中断时,就必须设置好函数的返回地址的断点。这样,在函数返回时,就可以得到函数的输出参数和返回值了。关于这里的实现说明请参考附录的源代码。<br />你完全可以参照附录的源代码写出你自己的简单的调试监视程序。当然,有几个问题因为比较复杂,我没有在这里进行说明。一个就是

2010-08-01 16:15:00 570

转载 用Debug函数实现API函数的跟踪(2)

<br /><br />对目标进程设置断点:<br />我们的目标是监视API函数的输入输出,那么,首先应该知道DLL模块中提供了哪些API函以及这些API的入口地址。在前面将过,广义的API还包括未导出的内部函数。如果你有DLL模块的调试版本和调试连接文件(pdb文件),也可以根据调试信息得到内部函数的信息。<br />· 得到函数名及函数入口地址<br />通过程序得到函数的入口地址有很多种方法。对于用VC编译出来的DLL,如果是Debug版本,可以通过ImageHlp库函数得到调试信息,分析出函数的入

2010-08-01 16:07:00 616

转载 用Debug函数实现API函数的跟踪(1)

如果我们能自己编写一个类似调试器的功能,这个调试器需要实现我们对于跟踪监视工具的要求,即自动记录输入输出参数,自动让目标进程继续运行。下面我们就来介绍在不知道函数原型的情况下也可以简单输出监视结果的方案——用Debug函数实现API函数的监视。 用Debug函数实现API函数的监视大家知道,VC可以用来调试程序,除了调试Debug程序,当然也可以调试Release程序(调试Release程序时为汇编代码)。如果知道函数的入口地址,只需在函数入口上设置断点,当程序调用了设置断点的函数时,VC就会暂停目标程序的

2010-08-01 16:05:00 877 1

H.264码流结构解析

H.264码流结构解析 包含h264简介、编码格式、传输、码流结构图说明及解码流程说明

2013-11-18

经典MDB数据库存储系统

一个非常好的对于MDB数据库的操作程序,包括追加、删除、更新、编辑、刷新记录等。支持模糊搜索、精确搜索以及分类查询等功能。还有备份数据库、压缩数据库、清空数据库一些附加功能,还可支持全屏浏览的功能。(托盘图标、对ini文件的操作、对注册表的操作、加载背景等) 它是一个集很多细小的功能于一体的程序,对于新手非常适合学习一下。(由于是早些年的作品,那时功底不是很好,代码难免有些失优雅,但却不失参考价值) 有什么疑问可以发送E-mail给我 E-mail: oathevil@gmail.com

2010-02-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除