初学者必看:VC++、Win32 SDK、MFC的区别
- 格式:docx
- 大小:14.27 KB
- 文档页数:2
VC2012 下写 Windows 时,有时需要判断编译环境。
在之前的文章《判断程序是否运行在 Windows x64 系统下。
》里说过如何在运行期间判断系统环境,但在编译时如何判断?MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。
这三个常量如何使用呢?看起来简单,其实是很困惑的。
在 Win32 配置下,WIN32 在“项目属性-C/C++-预处理器-预处理器定义”里声明了,而在 x64 配置下,这个常量并不在项目预定义列表中。
这是否说明可以根据 WIN32 来判断是否在 x64 平台呢?不。
在 Windows SDK 的minwindef.h 下第 37 行有如下定义:#ifndef WIN32#define WIN32#endif即是说,只要包含了 Windows.h,那么 WIN32 常量是肯定定义了的,所以不能用于判断平台环境。
但是如果在预处理定义里删掉 WIN32,又不包含Windows.h,那么 WIN32 未定义。
下面看 _WIN32 和 _WIN64,这两个比较特别,没有任何显式定义。
在Windows.h 里没有,在“项目属性-C/C++-预处理器-预处理器定义”下也没有。
根据 MSDN,这是由编译器(ml.exe/ml64.exe)内部定义的。
具体描述是_WIN32:Defined for applications for Win32 and Win64. Always defined._WIN64:Defined for applications for Win64.下面看一段程序:(分别在 Win32 和 x64 配置下运行一次)#include <iostream>using namespace std;int main() {#ifdef _WIN64cout << "_WIN64 is defined as " << _WIN64 << endl;#endif#ifdef _WIN32cout << "_WIN32 is defined as " << _WIN32 << endl;#endifcin.get();return 0;}在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。
外挂开发基本条件外挂技术的讨论(只限于讨论) 大家好,我们继续外挂技术的讨论,今天的内容我想对那些想要做外挂却又有点无从下手的朋友会很有帮助,我整理了一下制作一个收费外挂所需要的技能,参考的书目以及工具。
1、熟悉windows系统。
针对目前网络游戏的现状,基本所有的网络游戏客户端都是以windows 为平台的,所以要做外挂windows一定要熟悉。
这种熟悉不是指操作的熟悉,而是要对一些windows的实现机制要有了解,并且对于不同版本的windows的区别要有了解。
比如在win2000中用CreateRemoteThread的方法可以很方便的把dll挂接到其他进程中,而win98就不行。
所以如果你用CreateRemoteThread做外挂,那么就不具备win98的兼容性。
windows的内核还是很复杂了,而且方面也比较多,作为外挂来说有几方面需要清楚比如进程管理方式,dll 管理方式,内存管理方式。
在这个方面我想《windows核心编程》是不二的选择。
2、一种适合的编程语言和工具。
很多关于语言和工具的争论其实是没有含义的,每种语言都有自己适合的地方,简单的例子不管java是不是很优秀,用它来开发外挂基本是不可能的(除非代理服务模式的服务端)。
我认为C++应该是很好的选择,而工具也推荐用vc,当然delphi 也不错但我觉得还是没vc适合,个人观点。
至于vb,大家还是别用来开发外挂吧,真的不适合。
书的话比较多,找两本经典的看看就ok了。
3、win32 sdk。
这个是不可少的,因为要涉及windows的一些内核方式的开发,还有涉及到游戏程序的跟踪,不懂win32 sdk那么开发中会有种寸步难行的感觉。
如果是用vc开发,我想应该用sdk而不应该用mfc。
推荐的书,《windows程序设计》和msdn,程序设计是让你知道win32 sdk开发的基本过程,而到后期查看msdn会很频繁。
4、程序跟踪。
对于包的加密,一般来说仅观察包的变化来破解可能性很小,所以要去程序中找到加密过程,还有一些程序中本身的保护机制的破解也需要跟踪程序。
C++MFC C++是⼀种静态数据类型检查的、⽀持多重编程范式的程序设计语⾔,⽀持过程化程序设计、数据抽象、⾯向对象程序设计、制作图标等泛型程序设计的多种程序设计风格。
MFC(Microsoft Foundation Classes),是⼀个微软公司提供的类库,以C++类的形式封装了Windows的API,并且包含⼀个应⽤程序框架,以减少应⽤程序开发⼈员的⼯作量,同VCL类似,是⼀种应⽤程序框架。
其中包含的类包含⼤量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
此外MFC的部分类为MFC/ATL 通⽤,可以在Win32 应⽤程序中单独包含并使⽤这些类。
由于它的易⽤性,初学者常误认为VC++开发必须使⽤MFC,这种想法是错误的。
作为Application Framework,MFC的使⽤只能提⾼某些情况下的开发效率,只起到辅助作⽤,⽽不能替代整个Win32 程序设计。
从C到C++ 计算机诞⽣初期,⼈们要使⽤计算机必须⽤机器语⾔或汇编语⾔编写程序。 世界上第⼀种计算机⾼级语⾔诞⽣于1954年,它是FORTRAN语⾔。 BASIC语⾔是1964年在FORTRAN语⾔的基础上简化⽽成的。 C语⾔是1972年由美国贝尔实验室的D.M.Ritchie研制成功的。 C++是由AT&T Bell(贝尔)实验室的Bjarne Stroustrup博⼠及其同事于20世纪80年代初在C语⾔的基础上开发成功的,C++保留了C语⾔原有的所有优点,增加了⾯向对象的机制。 ⾯向对象程序设计,是针对开发较⼤规模的程序⽽提出来的,⽬的是提⾼软件开发的效率。不要把⾯向对象和⾯向过程对⽴起来,⾯向对象和⾯向过程不是⽭盾的,⽽是各有⽤途、互为补充的。学习C++,既要会利⽤C++进⾏⾯向过程的结构化程序设计,也要会利⽤C++进⾏⾯向对象的程序设计。 如果要⽤C++创建窗⼝,我们需要使⽤到系统API或者使⽤封装了这些API的⼀些库,前者如Win32程序设计,后者如MFC、wxWidgets。
题目
1.将文章中的英文字体全部改为Tahoma。
2.将文章各段的首行缩进设置为1厘米。
3.将标题设置成七彩霓虹的文字效果。
4.将文章中的所有API改成隶书2号空心。
5.将页面纸张方向设置为横向,纸张大小设置为16开。
注意:全文内容、位置不得随意变动,否则后果自负。
红框之内的文字不得操作,否则后果自负。
什么是WinSDK
大致说来windows编程有两种方法:1. windows c方式(SDK);
2.c++ 方式:即对SDK函数进行包装,如VC的MFC,BCB的OWL 等,如果要深入下去,还是要熟悉SDK。
两种方法有哪些区别呢:SDK编程就是直接调用windows的API 进行编程,但是有上千个API组成(win95的API有两千多个),这种数目太大了,对于编程显然不利。
而MFC把这些API封闭起来,共有一百多个类组成。
一般只需20多个windows类和另外20多个通用的非windows类就可“干活”了,这一改变无疑是有很大好处的。
尽管MFC如此方便,但是要学VC,直接去学MFC却是不明智的选择。
只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。
那些如多少天精通什么什么的书籍其实讲的全是些如怎么使用VC这种工具的话题,学来学去学会了怎么使用VC这种工具,而不能深入MFC编程。
像VB这类工具就更令人感觉到太闷了,不过各有各的好处。
MFC虽然提高了程序员编程的效率,但是也失去了SDK编程的灵活性不好意思,跑题了……
API,全称Application Program Interface,意思是应用程序编程接口。
ATL用于编写COM程序,CLR是.NET的公共语言运行库,MFC是指MFC类库,MFC程序是用这些类库做出的程序,WIN32常规就是不用MFC,使用API函数编的程序。
MFC、ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用。
当然关于C++开发的库不止这3个,不过这3个是微软推荐。
从编程所处层次而言,WIN32为最底层,其次是MFC.然后是CLR.WIN32winAPI MFC MFC类库库1.WIN32常规就是不用MFC,使用API函数编的程序。
2.MFC库有很多年的历史了,MFC是基于Windows API的简单封装。
其核心架构基于"Document/View"架构(20年前被认为很潮流的一种概念)和消息流动机制。
这个库自从VC6开始到现在都没有多大改动。
MFC封装的范围包括GUI,IO,数据库,网络编程等等方面。
但是很多系统开发必须的api都没有封装,这样开发者一般都在MFC的基础上自己处理与业务相关的任务。
事实上很多人用MFC只是利用其GUI部分的封装。
这个库GUI处理的效率也并不是很高,有时候与UI处理相关的代码会占到整个项目的一半甚至更多。
总的来说,这是一个垂老的库,微软在10年以来,除了对MFC进行修修补补以外,没有进行大的改进或者更新。
如果你问MFC还会活多久?恩,这是个问题。
如果有一天MFC不在了,微软在这个级别上并没有其他产品能够代替它。
3.CLR库是随着.Net Framework2和VS2005一起发布的库,其核心的实现和C#,一样。
都是基于公共语言运行库。
.Net Framework封装了大量系统的api,以类库的形式提供给开发者。
C++中的CLR库可以使用其中和本机代码有关的部分,目前C++还不能涉及到部分。
CLR库中的C++颠覆了很多标准C++的传统,甚至可以说,这里的C++不是C++,只是披着C++的皮干其他的事。
MFC编程微软基础类库(MFC:Microsoft Foundation Class)是微软为Windows程序员提供的一个面向对象的Windows 编程接口,它大大简化了Windows编程工作。
使用MFC类库的好处是:首先,MFC提供了一个标准化的结构,这样开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上”,从一个比较高的起点编程,故节省了大量的时间;其次,它提供了大量的代码,指导用户编程时实现某些技术和功能。
MFC库充分利用了Microsoft开发人员多年开发Windows程序的经验,并可以将这些经验融入到你自己开发的应用程序中去。
对用户来说,用MFC开发的最终应用程序具有标准的、熟悉的Windows界面,这样的应用程序易学易用;另外,新的应用程序还能立即支持所有标准Windows特性,而且是用普通的、明确定义的形式。
事实上,也就是在Windows应用程序界面基础上定义了一种新的标准——MFC标准。
为了更好的理解MFC,我们有必要了解一下MFC的历史。
2.4.1 MFC历史开始,Microsoft建立了一个AFX小组,AFX代表Application Framework,即应用程序框架。
据说创建该小组原意是为了发布一个Borland C++的OWL的竞争性产品,因为那时侯Borland 公司的应用程序框架OWL(object Windows Language)已经做的相当成功。
AFX小组象OWL那样,提出了一个高度抽象Windows API的一个类库。
他们采用自顶向下的设计方法,逐步将对象抽象出来,并施加到Windows上。
然后,他们试着花了几个月时间用这个类库来编写应用程序,结果发现这个类库偏离Windows API实在太远,过分抽象并没有太大的实用性,相反大大降低了应用程序的效率。
于是,他们干脆放弃了整个AFX类库,对类库进行重新设计。
这次,他们采用了自底向上的方法,从已有的Windows API着手,将类建立在Windows API对象基础上,设计出后来成为MFC1.0的一个类库。
第三章 MFC 应用程序概述第3章 MFC 应用程序概述Microsoft Windows 是微软公司推出的一个应用于微机上的具有图形用户界面的多任务和多窗口的操作系统。
Windows 应用程序也称为窗口应用程序,所有的窗口应用程序都有着相同的窗口风格和菜单结构,用户界面友好,方便用户操作。
本章从剖析窗口应用程序的基本结构入手,继而介绍使用MFC 类库开发的应用程序框架结构,并介绍窗口应用程序运行的核心机制-消息映射。
学习了本章,你将对MFC 应用程序框架结构和运行机制有个整体的了解,为后面进入窗口应用程序开发打下良好的基础。
3.1 窗口应用程序概述窗口应用程序的开发一般采用可视化的面向对象的开发,可选择的窗口应用程序开发语言有Visual C++、Visual Basic 、Visual Java 、Dephi 等等。
无论采用哪一种开发语言,首先要了解窗口应用程序的基本机制。
3.1.1 窗口编程基础窗口应用程序运行于Windows 操作系统,Windows操作系统是一个多任务操作系统,因此窗口应用程序的组成,支持技术,基本运行机制等与DOS 应用程序有着本质的区别。
在学习开发窗口应用程序之前,先要对窗口应用程序有一个概念上的了解。
1. 窗口窗口是应用程序与用户进行交互的界面,应用程序通过窗口传递信息给用户,同样用户通过窗口输入数据,发布命令给应用程序。
Windows 界面包含了丰富的标准用户界面元素,包括窗口、图标、菜单、滚动条、对话框、控件和消息框等。
用户使用这些界面元素可以方便的与应用程序进行交互,一个典型的窗口外观如图3-1所示。
垂直滚动条控制菜单栏标题栏菜单栏关闭按钮最小化按钮最大化按钮客户区VC++6简明教程图3-1 Windows应用程序窗口组成在Windows编程中,各种窗口、菜单、按钮、对话框及程序模块等Windows的规范部件是按“对象”来组织的。
为了提高开发窗口应用程序的效率,微软公司为用户提供了大量能创建上述标准元素的API函数和C++类,并且以Windows API函数库和C++类库的形式提供给用户,以充分满足构成应用程序操作界面的需要。
VC学习经验谈一、VC是什么?学VC是学什么?首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试)C和C++。
WindowsSDK(软件开发工具)VC的灵魂:MFC(微软基础类库)ATL(ActiveX模板类库)其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG) VC是许许多多技术的综合,就好像少林72般绝技,一般在应用中学会其中很少一部分就够了。
我们的现在目的,其实不过是学一套少林长拳。
这套长拳应包括:1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。
2、C语言基础3、C++最基本内容:类、继承性、封装性、多态性的概念4、如何用向导建立一个程序框架5、设计菜单6、设计工具条7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文本、编辑框等8、知道怎样新建类、成员函数、成员变量、消息处理函数。
9、了解最常用的Windows消息:如WM_PAINT(重绘窗口),鼠标按下、弹起、移动,初始化对话框,等。
10、了解最简单的GDI(图形设备接口):写文字、画框、画点、画线、画圆,设置画笔、画刷。
11、熟悉最常用的MFC类:CWndCDocumentCViewCDCCDialogCWinAppCGdiObject及子类CString、CPoint、CRect、CSize等简单数据类型CFile以上提到的这些内容,是每个人都会用到的内容。
二、MFC简介上述主要内容都是与实际操作关系非常密切的,在此不可能讲清楚;而且,这些在一般的书里都会讲到。
我主要将最重要的MFC介绍一下。
MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。
应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。
这是一个初进行开发人员都可能遇到过的概念不清的问题,自己当年也同样有过误解,做
技术我感觉一定要专,但是,不代表毫不关心相关的知识,至少概念层次上要知道,所以,这里还是再把这些内容纪录下来,好记性不如烂笔头:
C/C++都是一种编程语言,程序员用它来创作(我喜欢用创作这个词,让写代码有一些艺术气息...)各种各样的程序,简单如计算闰年,复杂到一个系统地实现。
当然,编写标准C程序的时候,我们还经常会调用各种库函数来辅助完成某些功能;初学者使用得最多的C库函数就是printf了,这些库函数是由你所使用的编译器厂商提供的。
在Windows平台下,也有类似的函数可供调用;不同的是,这些函数是由Windows操作系统本身提供的。
Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序。
这些
函数是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称为API函数。
我们在编写Windows程序时所说的API函数,就是指系统提供的函数,所有主要的Windows函数都在Windows.h头文件中进行了声明。
使用windows API创建的能在windows上运行的程序统称为windows程序。
这些API随着系统的更新升级,他们也是在不断更新和扩充,但是,其行为基本保持
不变以保证不同平台对应用程序的兼容性,面对越来越多地API,我们怎么获取可靠的帮
助呢?最大的帮助就是MSDN,你可以把MSDN理解为微软向开发人员提供的一套帮助系统,其中包含大量的开发文档、技术文章和示例代码。
MSDN包含的信息非常全面,程序
员不但可以利用MSDN来辅助开发,还可以利用MSDN来进行学习,从而提高自己。
对于初学者来说,学会使用MSDN并从中汲取知识,是必须要掌握的技能。
我们还经常听人说Win32 SDK开发,那么什么是SDK呢。
SDK的全称是Software Development Kit,中文译为软件开发包。
假如现在我们要开发呼叫中心,在购买语音卡的同时,厂商就会提供语音卡的SDK开发包,以方便我们对语音卡的编程操作。
这个开发包通常都会包含语音卡的API函数库、帮助文档、使用手册、辅助工具等资源。
也就是说,SDK实际上就是开发所需资源的一个集合,再具体点说,你知道CreatePorcess这个API,
那怎么使用,你需要有头文件,当然还需要提供功能的系统DLL库的引出库lib,这些都在SDK中。
现在读者应该明白Win32 SDK的含义了吧,即Windows 32位平台下的软件开发包,包括了API函数、帮助文档、微软提供的一些辅助开发工具。
提示:API和SDK是一种广泛使用的专业术语,并没有专指某一种特定的API和SDK,例如,语音卡API、语音卡SDK、Java API、Java SDK等。
自己公开的DLL函数也可以叫API!!!
一般来讲,狭义上的API指 MS公开的函数。
比如MSDN中介绍的函数。
广义的API 可以包括所有的函数,你自己的函数也算,未公开的也是。
指世界上一切函数。
都可以叫API--pplication Programming Interface ; SDK也不仅仅指MS的开发包,你自己的
程序如果需要让别人作2次开发,你就会提供一些函数接口让别人编程,你提供的材料也
叫SDK.
有了语言(C/C++),有了开发资源(SDK)、有了帮助文档(MSDN),ok,我们可以编写windows程序了,等等、工具有没有更好的工具呢,人类之所以进步就在于会使用工具,所以,为了更加高效的开发程序,一些集成开发环境诞生了,其中, Visual C++就是一个支持C/C++语言开发的集成开发环境(IDE)。
记住,Vc++不是什么新的编程语言,他只是 IDE,只是一个编程的辅助工具,具体来说,Visual C++包含了源程序编辑器、
C/C++编译器、MFC和ATL等,其中,MFC和ATL可以简单的理解为再次封装的Windows的系统接口,原生接口就是API 。
其中,MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在
C++环境下编写应用程序的一个框架和引擎,也可以说,MFC是Win API与C++的结合后的再一次封装。
OWL(borland公司,其已经逐渐淡处)、VCL(Borland公司--现在已和Inprise合并专--为DELPHI设计的,其是由OWL演变的)和MFC(ms专为vc++设计的)是不同公司提供的三大类库,更确切点说,他们都是应用框架。
DELPHI:也是一种集成开发环境,不过他支持的语言是源至于pascal的Object Pascal.他使用的框架就是VCL.
BCB:就是Inprise公司使用了Delphi的IDE和VCL,再配上C++语言推出的开发环境C++Builder,很多人很念旧,所以冠以Borland C++ Builder之名,简称为BCB。
ATL是全新的COM 开发工具:---- ATL 是ActiveX Template Library 的缩写,它是一套C++模板库。
使用ATL 能够快速地开发出高效、简洁的代码,同时对COM 组件的开发提供最大限度的代码自动生成以及可视化支持。
从Microsoft Visual C++ 5.0 版本开始,Microsoft 把ATL 集成到Visual C++ 开发环境中。
SDK + C 完全可以进行所有的windows程序开发,当然,你还可以采用MFC + C++,当然,你要用SDK + C++ 也是你的自由,但是MFC + C可是impossible的事情,因为,MFC就是C++写的,C可不支持类哦...。