随笔分类 - 03.2.1 VC&MFC
摘要:CoInitialize()和AfxOleInit()都是初始化COM库,不同之处在与:OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而 OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括: (1)Clipboard; (2)Drag and drop; (3)Object linking and embedding(现在的OLE,已不再仅仅是Object linking and embedding的概念);...
阅读全文
摘要:摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由 于格式不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。推荐linux动态库的创建请阅读:《Linux静态/动态链接库的创建和使用》文章来源:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html1、引言
阅读全文
摘要:文章来源:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”。“白盒复用”的缺点比较多,总结起来有4点。 暴露了源代码;多份拷贝,造成存储浪费; 容易与程序员的“普通”代码发生命名冲突; 更新功能模块比较困难,不利于问题的模块化实现; 实际
阅读全文
摘要:一、类嵌套的疑问C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题。假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的:class B;class A{ public: B b;};class B{ public: A a;};因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。在这里我们只需要把其中的一个A类中的B类型成员改成指针形式就可以避免这个无限延伸的怪圈了...
阅读全文
摘要:来自http://blog.csdn.net/phunxm/article/details/5082488一.IDE基础配置1.字体VC6中“Tools→Options→Format→Font”配置字体;VC2005中“工具→选项→环境→字体和颜色”配置字体。编写代码一般采用等宽字体,等宽点阵(位图)字体,相对矢量字体而言具有兼容性好和显示清晰的优点。常用的编程等宽字体包括Fixedsys(VC6和notepad御用字体)、Consolas、YaHei Mono。VC6默认可选字体只有Fixedsys和Terminal,可通过修改注册表来改字体,在HKEY_CURRENT_USER/Softw
阅读全文
摘要:包含目录:#include 中headerfile.h的搜索目录。如果有XXX.h找不到,设置这个目录可以解决。附加依赖项:C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码。所以,要使用一个库,除了要include他的头文件以外,还要在链接过程中把lib加进去。这个就是在附加链接库中设置。其实,一般的库会用#pragma comment(lib,"xxx.lib") 来设置这个过程出错会出现link error,大概是“未定义的函数XXX”。库目录:就是寻找.lib
阅读全文
摘要:stdafx.hVC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错,所以就GOOGLE了一下,总算是弄清楚了。。。stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。简介预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文
阅读全文
摘要:最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下。 刚开始拿到这个问题,很自然的就想到GetDlgItemText():UINT GetDlgItemText( HWND hDlg, // handle to dialog box int nIDDlgItem, // control identifier LPTSTR lpString, // pointer to buffer for text int nMaxCount // maximum size of string);...
阅读全文
摘要:为什么会出现这个错误??“error LNK2005: 已经在*.obj中定义” 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误,弄清楚它形成的原因,就可以轻松解决它了。造成LNK2005错误主要有以下几种情况:1.重复定义全局变量。可能存在两种情况:A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。 正确的应该是在一个CPP文件中定义如下: int g_Test; 那么在使用的CPP文件中就应该使用: extern int g_Test 即可,如果还...
阅读全文
摘要:今天,有朋友在问为什么我在调试的时候会出现"没有可用于当前位置的源代码"的错误呢?MSDN上的说法:没有可用于当前位置的源代码,项目不包含您试图查看代码的源代码。原因通常是双击了“调用堆栈”窗口或“线程”窗口中没有源代码的模块。可以继续调试,但不能使用源代码窗口设置断点并在此位置执行其他操作。如果需要设置断点,请使用“反汇编”窗口。编辑经验,出现该错误就有可能是下面中的一种,读者可以一一试试:1. 在项目中引用另一个项目,而修改了被引用项目的代码后,引用的dll没有更新,所以出现上述错误。2. 试图调试托管代码的转储文件。VisualStudio仅支持使用SOS工具,在“即
阅读全文
摘要:测试创建和打开文件映射的时候老是得到"句柄无效"的错误, 仔细看了MSDN以后才发觉是函数认识不透, 这里把相关的解释翻译出来1 HANDLE CreateFileMapping(2 HANDLE hFile, //物理文件句柄3 LPSECURITY_ATTRIBUTES lpAttributes, //安全设置4 DWORD flProtect, //保护设置5 DWORD dwMaximumSizeHigh, //高位文件大小6 DWORD dwMaximumSizeLow, ...
阅读全文
摘要:来源http://blog.csdn.net/northhero/article/details/4514363我们可以发现,SDK程序中多了一个HWND类型的变量hwnd。该变量用来保存由CreateWindowEx函数创建的窗口句柄,并将其作为参数传递给随后的显示窗口操作(ShowWindow函数)和更新窗口操作(UpdateWindow函数)。而我们自定义的实现代码中,CWnd类定义了一个HWND类型的成员变量:m_hWnd,用于保存这个窗口句柄。首先CWnd类的CreateEx函数创建窗口,并将该窗口句柄保存到这个成员变量,接着调用CWnd类的ShowWindow函数显示窗口时,就不需
阅读全文