1. < include <> 一般用于包含系统文件,诸如 stalib.h, stdio.h, iosream 等
2. <inlcude "" 一般用于包含自定义头文件,比如我们自定义的test.h , declare.h等
a. ” “ 默认从项目当前目录查找文件,项目工程文件所在目录 include .vcxproj
b. 再从项目配置的头文件引用目录去找 C/C++ -->Additional Include Directories
c. 再从系统类库目录中去找 VC++ Directories --> Include Directories
3. 实际项目开发中Solution Exploer 里可以有文件夹组织,实际项目中最好不用。如果要用(Additional Include Directories)第一行必须写.\从
当前目录中搜索,否则Resource.h和stdaf.h会在打开在别的工程中(PS: 不在文件夹的文件不会有这个问题)
4. 实际项目开发给User Library
a.Debug_64_VS2015 .dll .lib .pdb
b.Release_64_VS2015
c. Include .h
Pre_Build Event copy.h to Include
Post_Build Event copy .dll .lib .pdb to Debug_64_VS2015
5. Linker->Input 里ArpyCg.lib; 后面;没有写的话,在编辑的时候可以看到,但是Edit以后就会消失不见,后面加入任意一个lib以后会覆盖到它
6. A.exe 引用B.dll, B.dll 引用C.dll
a. 开发过程中,尽量减少头文件之间的互相包含,在cpp里包含所需头文件
b. 如果B.dll 里的头文件包含了C.dll的头文件,那么A.exe的Additional Include Directories需要包含B.dll和c.dll的头文件
c. 如果B.dll的Additional Library Directories 配置C.dll,A.exe不需要配置,它通过B.Dll配置好路径的C.lib 去寻找C.dll,所有dll均方放到
A.exe的平级路径
d. 编译时需要配置lib库路径,不需要dll路径,编译是位了生成dll,Link2019就和lib库相关(只改cpp文件lib库不用更新,拷贝生成的dll即可)
e. exe 运行或者调试时,lib库函数地址已经被编译到exe文件里,所有不需要发布lib库,发布dll即可,通过dll搜索顺序来找到dll(PS:通常发布PDB和dll文件就可以调试)
7. 公司用SQLsercer方便C++和C#,MySQL方便Java开发
8. 桌面软件,响应用户输入的是一个线程,后台程序处理计算是另外的线程
e.g. 用户点击button开始计算,如果不在另外一个线程中计算,则界面再次点击时无响应,应用程序会询问用户是否关闭,关键时用户并不知道正在计算中。
正确的做法是:点击 button以后弹出模态对话框正在计算中,同时开启线程来计算,等到计算结果完成后关闭对话框(参考1-10 Dole邮件 C++11线程同步写法)
或者用两个PostMessage,两个PostMessage函数用消息来实现线程同步
PS: 如果用户点击dlg的cancel按钮以后,如何停止线程有待商议(t.~thread ???) / 或者可以直接将线程detach
9. C/C++ Advanced Show Includes :Yes 编译时输出相关信息到output窗口
Generates a list of include files with compiler output
10. A.h 文件中没有包含 <vector>却可以在cpp文件使用 vector,有两种情况
a. 在预编译头文件stdafx.h里有定义
b. 包含A.h 文件里面的cpp文件里,在#include <A.h>前面包含的头文件中有#include <vector> 或包含#include <vector>
chrono::steady_clock::time_point tm = chrono::steady_clock::now()
11. 支持不同版本的工程,然后在AgileWalkAlgorithm 文件夹里面 有三个工程配置,三个solution文件,一份源码
a. 方案一: 将VS002.sln文件放入VS2010工程目录下,会报SDKDDKVer.h找不到的错误。
原因时VS2002 原先自带的stdafx.h 不包含#include"tragetver.h",VS2010里的stafx.h 里包含。VS2002引用VS2010自带的stafx.h,所以找不到,条件编译即可解决
#if _MES_VER >= 1600 //VS2010
#include "SDKDDKVer.h"
#endif
条件编译解决以后,会在AgileWalkAlgorithm.rc里报"fatal error RC1015 : cannot open include file 'verrsrc.h'"。这个问题无法避免,所以放弃这个方案,采取
高版本向低版本所在文件夹来复制
b. 方案二:将.vcxproj .user .filters .sln 4个文件copy到低版本所在文件夹
一开始提示错误 fatal error C1189 #error
照着提示将——WIN32——WINNT 改成0x0501,运行会出现error C2061语言错误,一股脑将stdafx.h 相关设置全改成 0x0501
WUBVER : If versions aren't aleady defined, default to most current.
XP VS2002 0x0501
XP VS2010 0x0601
Win10 VS2015 0x0A00
If you wish to build your application for a previous Windows Platform, include WinSDKVer.h
c. 把三个solution文件放在最外层
(1) Ag_Vs2015.sln 通过文件内容 AgileWalkAlgorithm_VS2015.vcxproj 来找到工程文件
在AgileWalkAlgorithm_VS2015.vcxproj 可以修改 ProjectName AgileWalkAlgorithm 显示名字(PS:三个vcxprojProjectName都是 AgileWalkAlgorithm,所以这里应该只是修改
文件名字Ag_VS2015.vcxproj,实际在编译器中显示的名字还是AgileWalkAlgorithm)
(2)sln相当于一个管家可以管理很多project
把sln拷贝到上一级,需要修改.\AgileWalkAlgorithm\AgileWalkAlgorithm_VS2015.vcxproj (指定project路径否则找不到)
VS2002 编译器没有TFS,使用Add Item to group
VS2015 编译器有TFS,可以使用Add solution to source Control
11. 在Solution Explorer里可以不加入Header Files,那么build工程时头文件会出现在External Dependencies里,在Header Files里再次加入这个头文件,那么下次
Rebuild时 External Dependencies里的头文件会消失
12. Working Directory 默认为$(ProjectDir) .vcxproj所在目录
LYY说最好改到$(OutDir)下,因为所有东西都输出到这个路径下方便工作
WaferMapTester.exe 的Debugging-> Working Directories 改到$(OutDir)
13. dump file的创建方法
a. 软件自己在crash的时候通过code自己创建
b. 内部用的Process monitor attach exe以后去创建dumpe file,可随时创建,不是crash的时候才创建
c. Windebug attach exe以后,crash时候会自动创建
14. 我们自己创建每个每组的类型是 MFC extension Dll
Rhapsody ArpyEdit
a. C# 里面有ToolWnd(里面封了一个win32 wnd),DockPane 需要放在FrameWnd里面,FrameWnd再放到ToolWnd西
b.ArpyEdit / VSIXRPyst 里的公共资源放在ArpyWnd下,不是公共资源不用放
c.ArpyCg 是MFC extension Dll,别的project都是Regular dll
ArpyUntity
ArpyWnd new CDynlinkLibrary (ArpyWnd) 移除