
VC++
文章平均质量分 61
万个函数千个类
这个作者很懒,什么都没留下…
展开
-
MFC 最新版本
MFC 版本历史:(截止于2020年6月30日)原创 2020-07-26 17:20:11 · 1744 阅读 · 2 评论 -
VC++: Under the Hood (谈VC++对象模型)
——谈VC++对象模型(美)简.格雷Jan Gray March 1994 Jan Gray is a Software Design Engineer in Microsoft’s Visual C++ Business Unit. He helped design and implement the Microsoft Visual C++ compiler.转载 2013-04-09 20:10:36 · 850 阅读 · 0 评论 -
成员函数指针与高性能的C++委托
Member Function Pointers and the Fastest Possible C++ Delegates 成员函数指针与高性能的C++委托撰文:Don Clugston翻译:周翔 引子标准C++中没有真正的面向对象的函数指针。这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegat转载 2013-04-09 21:52:20 · 1102 阅读 · 0 评论 -
VC下 Runtime 版本不同原因引起的一个编译问题案例
BackgroundMSDN中对于在不同的配置下Link的LIB作了说明:C Runtime Library:开关对应的库版本/MDMSVCRT.LIB多线程DLL的Release版本/MDdMSVCRTD.LIB多线程DLL的Debug版本转载 2013-03-01 14:23:53 · 1605 阅读 · 0 评论 -
有关C Runtime 的转载
首先说明,我google了半天,想找到英文的关于这个资料,但是实在找不到,只好转载国人的讨论。 CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CR转载 2013-03-01 12:51:18 · 362 阅读 · 0 评论 -
C语言运行时库详解 (C/C++ Runtime)
运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。 随着操作系统 多线程技术的发展 ,最初的C运行时库无法满足程序的需求,出现了严重的问题 。C运行时库使用了多个全局变量(例如errno)和静态变量,这可转载 2013-03-01 16:41:12 · 12230 阅读 · 0 评论 -
windows 编程的学习次序
如何学习Windows编程经常有初学者询问如何学习Windows编程?很多人从MFC开始学习,结果常常是一头雾水,知难而退;也有人毅力坚强,熬过了MFC的阵痛期,最后却是知其然而不知其所以然,并且思维被限制在MFC的框架之中,遇到稍微有点规模的程序就无从下手了。以我个人的这些年的Windows开发经历,我建议Windows上的学习路线如下:首先当然是语言的学习,比如C或C+转载 2013-02-17 12:48:33 · 4908 阅读 · 0 评论 -
一个优秀windows C++程序员的知识体系
思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图:转载 2013-02-28 16:58:31 · 1030 阅读 · 0 评论 -
虚函数与虚继承寻踪
封装、继承、多态是面向对象语言的三大特性,熟悉C++的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C++的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题,然而多重继承又会产生成员冲突的问题,虚继承在我看来更像是一种“不得已”的解决方案。多态让对象具有了运行时特性,并且它是软件设计复用的本质,虚函数的出现为多态性转载 2013-04-10 07:25:58 · 548 阅读 · 0 评论 -
对象的传值与返回
对象的传值与返回 说起函数,就不免要谈谈函数的参数和返回值。一般的,我们习惯把函数看作一个处理的封装(比如黑箱),而参数和返回值一般对应着处理过程的输入和输出。这种情况下,参数和返回值都是值类型的,也就是说,函数和它的调用者的信息交流方式是用过数据的拷贝来完成,即我们习惯上称呼的“值传递”。但是自从引入了“引用”的概念后,函数的传统模型就不再那么“和谐”了。引用的传递可以允许函数和调用者共转载 2013-04-10 07:39:59 · 914 阅读 · 0 评论 -
Welcome Back to C++ (Modern C++)
C++ is one of the most widely used programming languages in the world. Well-written C++ programs are fast and efficient. The language is more flexible than other languages because you can use it to cr转载 2013-05-21 16:32:48 · 806 阅读 · 0 评论 -
解决文档/视图结构中相互调用不方便的问题
MFC 的Document/View程序中,需要频繁调用CMainFrame 类以及CDocument/CView(View1/View/View3...)中的成员,而且相互调用。虽然系统提供了很多函数可以帮助,但是感觉还不够爽。这里可以学一下theApp的办法,给这些类定义全局指针,比如:CMainFrame* pMainFrame;CDemoDoc* pDoc;CTex原创 2016-04-06 21:31:59 · 446 阅读 · 0 评论 -
有关窗口对象指针和窗口句柄获取的相关函数。
顺便记录一下有关窗口对象指针和窗口句柄相关的函数。Win32 API函数对窗口的操作总是需要一个窗口句柄(hWnd)来指向需要操作的对象;比如::SetWindowPos(hWnd,...)而MFC内,窗口句柄已经包含在对象成员内,需要的是指向窗口对象的指针(pWnd),这样就可以对此对象的成员函数操作了。比如pWnd->SetWindowPos(...)常用获得函数:AfxGet原创 2016-04-07 22:37:40 · 2741 阅读 · 0 评论 -
如何为SDI程序中多个不同视图路由命令消息
具体见图:图片中代码不太清楚,贴在这里:BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo){ if (pDoc) return pDoc->RouteCmdAllViews(GetActiveView(), nID, nCode, pEx原创 2016-04-06 21:17:30 · 618 阅读 · 0 评论 -
巧用/用足 UpdateAllViews()中的三个参数
Suppose you write a program editor that uses the MDI architecture to allow the user to display multiple views of a source code file. If a change made to a file in one view is visible in the others, al转载 2016-04-06 20:44:01 · 1587 阅读 · 0 评论 -
MFC MDI项目如何一个文档显示多个不同视图类(比如文字和图表,各自拥有单独的框架窗口)
先上图:每个窗口都有自己独自的完全窗口,可关闭可最大最小化。不是那种Splitter窗口。直接用MFC的MDI或SDI向导是出不来这种效果的。你可以用同一份文档中的数据在不同窗口显示文本或图表,可以有若干表示方式。实施步骤:1,新建一个菜单项,这里是Window-->ColorView2,新建立不同的视图类,这里是CMdiColorView,在其OnDraw函数里可原创 2016-04-05 22:45:43 · 7005 阅读 · 0 评论 -
如何在VC++中使用Windows Forms (VS2012-VS2015)
https://social.msdn.microsoft.com/Forums/en-US/a6d92d96-4a86-4ef7-a815-7f588a6073ea/vs-express-2012-no-c-windows-forms-application?forum=Vsexpressvc在VS2010里新建项目,在VC++/CLR里可以直接新建Windows Forms项目,使用相关向导。但转载 2015-08-23 12:48:28 · 4840 阅读 · 0 评论 -
writing .NET applications, which language to use?
Note When writing .NET applications, all languages are equivalent because they all com-pile down to Microsoft Intermediate Language (MSIL, or IL for short). In fact, you could saythat to a very转载 2015-08-23 16:30:36 · 576 阅读 · 0 评论 -
CMDIChildWnd/CFrameWnd CDocument/CView/CDocTemplate
CMDIChildWnd* pActiveChild = MDIGetActive();CDocument* pDocument = pActiveChild->GetActiveDocument();CView* pVew = pActiveChild->GetActiveView();CDocTemplate* pTemplate = pDocument->GetDocTemplate(原创 2013-01-04 14:53:40 · 1192 阅读 · 0 评论 -
消息耦合还是接口耦合
最近公司准备开发一个新产品,需要重新设计一套新的框架,但是就这框架中各模块的通信方式,大家产生了争论,主要集中在各模块的交互方式是消息耦合还是接口耦合。需求大概这样,我们需要封装一套客户端SDK, 暴露一系列API给外部用,而这套SDK内部会有很多模块组成,这些模块之间相互会有交互。第一种设计是基于接口耦合,框架如下:这种接口方式的设计要点是:a. 各模块以类似CO转载 2013-02-28 16:05:40 · 881 阅读 · 0 评论 -
理解 Windows API 调用过程
理解 Windows API 调用过程我们在应用层调用一个Win32 API, 系统内部究竟是如何执行的, 它是如何从用户态进入到内核态的呢 ?对于每层一些概念的解释,这里不详述了,具体可以参考理解Windows内核模式与用户模式.以Kernel32里的 CreateProcess 为例, 内部会调用ntdll.dll里导出的NtCreateProcess, ntd转载 2013-02-28 15:14:18 · 1646 阅读 · 0 评论 -
C++宏定义中的 #,#@,##
宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号。如定义好#define STRING(x) #x之后,下面二条语句就等价。 char *pChar = "hello"; char *pChar = STRING(hello);还有一个#@是加单引号(Charizi转载 2013-01-30 11:31:50 · 534 阅读 · 0 评论 -
程序各种资源泄露的调试方法
具体内容参见 熊力的《Windows用户态程序高效排错》以及他的Blog,http://lixiong.cnblogs.com/。这些内容对我的工作帮助很大,在此感谢他!(对于不愿意在测试工具上投入太多财力的公司来说,此方法较好)下面简单列一下:内存泄露:使用WinDbg中的gflags和umdh进行定位查找。句柄泄露:使用Application Verifier和WinD转载 2013-01-27 19:40:04 · 1476 阅读 · 0 评论 -
GDI编程需要注意的地方(句柄泄漏)
写GDI的时候,我们经常会由于粗心大意,忘记释放GDI资源,导致GDI句柄泄露。再加上如果单元测试做的不好,就会在产品发布以后发生问题。众所周知,Windows上对于一个进程允许的最大GDI句柄数量为9999,如果程序有大量的GDI句柄没有被及时回收,那么程序就会表现的不正常。如果这种问题发生在以前的WINDOWS 98年代,甚至会造成系统崩溃。所以,这里我将陆续记录一些GDI转载 2013-01-27 19:37:14 · 3750 阅读 · 0 评论 -
多线程--内核对象和句柄泄露&CloseHandle
多线程--内核对象和句柄泄露&CloseHandle1.什么是内核对象?内核对象是操作系统分配的一个内存块,该内存块是一个数据结构,用于管理对象的相关信息。当应用程序要与系统设备交互的时候,将使用内核对象。而出于安全考虑,进程是不能直接操作内核对象的,于是操作系统提供相应的函数来访问它们。存取符号对象、事件对象、文件对象、作业对象、互斥对象等都是内核对象。编转载 2013-01-27 19:31:14 · 2331 阅读 · 0 评论 -
<<windows程序设计>> Charles Petzold VS 王艳平
王艳平的的《windows程序设计》和外国的重复吗,看哪个好啊?Charles Petzold的那本比较侧重于应用,比较全面的介绍了win32编程 但个人 感觉深度不够,很多东西只是点到为止。 王艳平的那本更偏向于系统底层,毕竟第二章就开始介绍进程与线程了,初学 win32编程的读者确实有点吃不消,我是先看第四章图形界面设计然后再回过头 看前面的几章的。后来看到>转载 2013-01-23 09:23:25 · 1275 阅读 · 0 评论 -
VC++6/2005/2010里调试DLL
VC++6里面的设置:调试肯定在Debug模式中由于DLL程序不能生成窗口等等原因不好调试,所以我们无法了解DLL程序的流程是怎么样的。下面简单介绍一个如何来调试DLL程序。应该知道写DLL文件肯定是给某个应用程序使用的,如果没有程序用到它那它就没有存在的意义了。既然知道DLL是给某个应用程序使用之后,那么如果应用程序开始运行了,在加载DLL后,必然会进入到DL转载 2013-01-17 15:22:27 · 2585 阅读 · 0 评论 -
compile/Link option setting in VC++6
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲转载 2013-01-18 15:58:44 · 1211 阅读 · 0 评论 -
进程通信之一使用WM_COPYDATA
进程间通信最简单的方式就是发送WM_COPYDATA消息。 发送WM_COPYDATA消息:SendMessage(接收窗口句柄, WM_COPYDATA, (WPARAM)发送窗口句柄, (LPARAM)&CopyData); 其中的CopyData为COPYDATASTRUCT结构类型,该结构定义如下:typedef struct tagCOPYDATASTRU转载 2013-01-19 10:46:17 · 580 阅读 · 0 评论 -
范型编程杂谈
谈范型(GP)之前, 先谈一下面向对象(OO), OO强调世界是由对象组成的,对象是由方法和属性组成的(个人感觉还应该加上事件),而对象之间又有继承(is-a)和组合等 关系。OO很符合我们认识世界的直觉,它以封装,继承和多态为特性,我们在现实工作中又总结出来了OO的5大设计原则和23种设计模式。总之,OO基本上已经可以很好的解决我们现实生活中的所有问题。那么既然OO已经可以很好的解决我们转载 2013-02-28 16:50:19 · 438 阅读 · 0 评论 -
软命令接口的适用场合
看到有些朋友很喜欢用软命令的方式来提供接口, 什么是软命令, 其实就是一个接口,根据参数的不同,可以实现N多的功能(我不知道"软命令"这名词是我原创还是现有的,我们暂时就这样称呼吧). 看看现实中有哪些产品已经成功应用了这种特性? 首先想到是的是windows窗口的消息处理函数,用C的方式是类似这样: LRESULT MessageProc(HWND hWnd转载 2013-02-28 16:07:09 · 760 阅读 · 0 评论 -
理解Windows内核模式与用户模式
理解Windows内核模式与用户模式内核层次架构windows程序运行分为内核模式和用户模式,内核模式可以访问所有的内存地址空间, 并且可以访问所有的CPU指令。一般程序运行在用户模式, 通过系统调用切换到内核模式执行系统功能,Windows系统通过这种方式来确保系统的安全和稳定。下面是内核的层次划分:硬件抽象层(Hardware Abstraction L转载 2013-02-28 15:11:53 · 579 阅读 · 0 评论 -
_MBCS
MBCS(Multi-Byte Chactacter System,即多字节字符系统)它是编码的一种类型,而不是某个特定编码的名称。 字符基础:ASCII,DBCS,Unicode 所有的string类都是以C-style字符串为基础的。C-style字符串是字符数组。字符类型有三种编码格式: 第一种是单字节字符集(single byte character set or SBCS)转载 2013-02-26 10:42:21 · 2808 阅读 · 0 评论 -
评侯捷的《深入浅出MFC》和李久进的《MFC深入浅出》
侯捷的<深入浅出MFC>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了。 而李久进的<MFC深入浅出>,听说的人可能就少得多。原因听说是这本书当时没有怎么宣传,而自从1999年第1版后,似乎也没有重印过,现在市面上根本找不到,所以大部分人都不知道。我手里现在恰好有一本,是从图书馆借的。这本书全名为<MFC深入浅出——从MFC设计到MFC编程>李久进编著,华中理工大学转载 2013-02-18 15:22:25 · 7571 阅读 · 0 评论 -
VC 中使用内存映射文件处理大文件
=========================================首先,通过 CreateFile() 函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。(其实是获取文件句柄)其次,通过 CreateFileMapping() 函数来为刚才创建的文件内核对象创建一个文件映射内核对象并告诉系统文件的尺寸以及访问文件的方式。(获取转载 2013-02-08 12:06:08 · 649 阅读 · 0 评论 -
Using Synchronization in Windows (sample 1 to 4)
The following examples demonstrate how to use the synchronization objects:1.) Using Critical Section Objects// Global variableCRITICAL_SECTION CriticalSection; void main(){ ...转载 2013-01-21 17:31:25 · 799 阅读 · 0 评论 -
Using Synchronization in Windows (sample 5 to 8)
Using Ssynchronization in windows (sample 1 to 4)5.) Using Condition Variables#include #include #include #define BUFFER_SIZE 10#define PRODUCER_SLEEP_TIME_MS 500#define CONSUMER_SLEEP_TI转载 2013-01-21 17:41:34 · 820 阅读 · 0 评论 -
句柄 HANDLE
句柄求助编辑百科名片句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它转载 2013-01-04 21:48:47 · 786 阅读 · 0 评论