在这以前先了解一个概念:解决方案与工程。
解决方案(Solution):一个大型项目的总体的工做环境;
工程 (Project):一个解决方案下的一个子工程;html
在VS中,一个Solution能够有一个或多个Project。在咱们建立一个工程时,若是没有指定Solution,VS会帮咱们建立一个与工程名相同的Solution,这时一个Solution里只有一个Project。全部在咱们的TestProject的文件目录结构中TestProject文件夹下还有一个TestProject文件夹(如图4),第一个就是整个Solution的目录,第二个才是Project的目录。c++
TestProject.sln:
整个解决方案(Solution)的配制文件,组织多个工程和相关的元素到一个解决方案中。用鼠标双击它就能用VS打开整个工程项目。git
TestProject.sdf:
浏览相关的数据库文件,它支持浏览和导航的特性。如跳转到方法、变量的声明,查找全部对象的全部被引用的地方,类视图等等。github
TestProject.suo:
(solution user opertion) 解决方案用户选项,记录全部将与解决方案创建关联的选项, 以便在每次打开时,它都包含您所作的自定义设置.数据库
TestProject.opensdf:
打开解决方案(Solution)时的临时文件,这个文件只有你的解决方案在VS打开的状态才会有,工程一关闭文件就被删除了。编程
TestProject.vcxproj:
记录工程(Project)相关的属性配制。windows
TestProject.vcxproj.filters:
文件过虑器,上图3“工程结构”中各个文件的组织和编排都是定义在这个文件中的。若是因为某种特殊的缘由(如系统或VS忽然崩溃)致使你打开工程时文件的组织结构是乱的,100%就是这个文件的缘由。服务器
TestProject.vcxproj.user:
用户相关的一些配制。网络
上面这些文件中有几个比较重要的必定不能删的文件是:多线程
TestProject.sln、TestProject.vcxproj、TestProject.vcxproj.filters
不要问我是怎样知道这些文件的做用的,请看官方文档:
VS2010定义:https://msdn.microsoft.com/en-us/library/3awe4781.aspx.
VS2015定义:https://msdn.microsoft.com/en-us/library/vstudio/hx0cxhaw(v=vs.110).aspx
COM(Component Object Model)组件对象模型是microsoft制定的一个组件软件标准,跟unix上的CORBA同样。凡是遵循COM标准开发出来的组件称为COM组件。目地是实现二进制方式的软件重用 。在windows平台上,COM的实现形式有DLL(进程内组件)和EXE(进程外组件)2种。
OLE(Object Linking and Embedding)对象链接与嵌入是微软的复合文档技术,可方便实现应用程序之间的通讯。在后来的OLE2中才导入了 COM,提供了对COM的支持,利用这种技术可开发可重复使用的软件组件COM。OLE是软件比较早提出的一种技术。
ATL(Active Template Library)活动模板库是一套C++模板库,经常使用于开发COM程序和ActiveX程序。要理解ATL技术可从如下两方面理解:
ATL因其采用了特定的基本实现技术,摆脱了大量冗余代码,使用ATL开发出来的COM应用的代码简练高效。
在ATL产生之前,开发COM组件的方法主要有两种:一是使用COM SDK(COM软件开发包)直接开发COM组件,另外一种方式是经过MFC提供的COM支持来实现。而如今 ATL已经成为Microsoft支持COM应用开发的主要开发工具。
MFC(Microsoft Foundation Classes)微软基础类是微软提供的一个用于Windows程序开发的基础类库。MFC以C++类的形式封装了Windows的API,而且包含一个应用程序框架,以减小应用程序开发人员的工做量。其中包含的类包含大量Windows句柄封装类和不少Windows的内建控件和组件的封装类。
ActiveX是微软提出的一组使用COM技术使得软件组件在网络环境中进行交互的技术集,它与具体的编程语言无关。做为针对Internet应用开发的技术,ActiveX被普遍应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地建立普通的桌面应用程序,此外ActiveX通常具备界面。
ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:
使用Visual Assist X
h: 头文件 cpp: 源文件 txt: 说明文件,如readme rc: 资源文件 rc2: 资源文件 ico: 图标,如logo等 sln: 解决方案工程文件 vcxproj: 工程文件 filters: 文件过虑器
Debug、Release等编译结构目录 ipch目录 aps: last resource editor state exe: build result idb: build state ipch: build helper lastbuildstate: build helper lib: build result. Can be 3rd party log: build log manifest: build helper. Can be written yourself. obj: build helper pch: build helper pdb: build result res: build helper sdf: intellisense dbase suo: solution user options tlog: build log user: debug settings. Do preserve if just one dev or custom debug settings
若是用TortoiseSVN进行管理,须要手动添加ignore属性将不须要上传的文件忽略掉。在你工程目录里,右键->TortoiseSVN->Properties->New->Other,弹出的对话框中Property name中选择svn:ignore,Property value中填入要忽略的内容(这里可使用能配符)。能够设置全局忽略样式。
Multi-threaded /MT Release版的多线程静态库 libcmt.lib Multi-threaded Debug /MTd Debug版的多线程静态库 libcmtd.lib Multi-threaded DLL /MD Release版的多线程动态库 msvcrt.lib+msvcrtxx.dll Multi-threaded DLL Debug MDd Debug版的多线程动态库 msvcrtd.lib+msvcrtxxd.dll
结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。
VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各类路径
打开安装目录下的VSDIR\VC\bin能够看到一系列的可执行程序.exe和批处理文件,这些就是VS2010构建、编译、连接时要用到的工具。看一下几个主要的工具:
cl.exe:编译程序 link.exe:连接程序 lib.exe:加载lib库的程序 nmake.exe:用makefile进行构建、编译的工具
使用VS的性能分析工具
打开一个“性能分析”的会话:Debug->Start Diagnotic Tools Without Debugging(或按Alt+F2),VS2013在Analysis菜单中。
检测CPU的性能,主要用于发现影响CPU瓶颈(消耗大量CPU资源)的代码。
检测GPU的性能,经常使用于图形引擎的应用(如DirectX程序),主要用于判断是CPU仍是GPU的瓶颈。
检测应用程序的内存,发现内存。
性能(监测)向导,综合检测程序的性能瓶颈。这个比较经常使用,下面再逐一说明。
进行采样统计,以低开销水平监视占用大量CPU的应用程序。这个对于计算量大的程序可大大节省监控时间。
彻底统计,测量函数调用计数和用时
跟踪托管内存分配。这个好像只有托管代码(如C#)才可用,通常以C++代码好像不行。
检测等待其余线程的线程,多用于多线程的并发。
有几个不一样的视图可供咱们切换,下面加粗的部分是我的以为比较方便和经常使用的视图。
函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的。它决定如下内容:(1)函数参数的压栈顺序,(2)由调用者仍是被调用者把参数弹出栈,(3)以及产生函数修饰名的方法。
常见的调用约定有__cdecl、__stdcall、fastcall,应用最普遍的是__cdecl和__stdcall,下面咱们会详细进行讲述。。还有一些不常见的,如 __pascal、__thiscall、__vectorcall。
__cdecl 是 C Declaration 的缩写,表示 C 和 C++ 默认的函数调用约定。是C/C++和MFCX的默认调用约定。
__stdcall是Standard Call的缩写,是C++的标准调用方式,固然这是微软定义的标准,__stdcall一般用于Win32 API中(可查看WINAPI的定义)。
__fastcall调用的主要特色就是快,由于它是经过寄存器来传送参数的。
__thiscall是C++类成员函数缺省的调用约定,但它没有显示的声明形式。由于在C++类中,成员函数调用还有一个this指针参数,所以必须特殊处理,thiscall调用约定的特色:
参考: