摘要:
不知道诸位有没有过这样的经历:本是简单合法的 C++ 代码,但编译链接的时候却出现了如下的链接错误:> error LNK2001: 无法解析的外部符号 __purecall在解决这个问题之前,我们可以一起重现这个错误,先。新建一个 Win32 工程,打开 VS 的工程设置,修改如下项目:将“启用 C++ 异常”设为“否”;将“基本... 阅读全文
posted @ 2010-06-01 23:59
carekee
阅读(1473)
评论(0)
推荐(0)
摘要:
在C++中,类的析构函数被解释为用于销毁 对象的代码块,在对象将被从内存中清除之前调用。而事实上,利用析构函数的调用时机,可以做很多普通的过程控制代码很难做到的 事情。比如在多线程程序中的锁。在加锁和开锁的过程中,必须非常小心地配对,稍有不慎就 会少了开锁次数,使资源锁得不到打开。在有复杂控制的程序体中,这种维护是很烦琐的。以Windows程序为例,在类 CWithLock中使用临界区定义一个锁,... 阅读全文
posted @ 2010-06-01 22:17
carekee
阅读(1784)
评论(0)
推荐(0)
摘要:
一般是三种方法:(1)用vector的vector,(2)先分配一个指针 数组,然后让里面每一个指针再指向一个数组,这个做法的好处是访问数组元素时比较直观,可以用a[x][y]这样的写法,缺点是它相当于C#中的一个锯齿 数组,内存空间不连续。(3)直接分配一个x*y大小的一维数组,这样保证空间是连续的,但访问数组元素不直观。对于我这个“经典”回答,我那时还一直是 挺得意的,... 阅读全文
posted @ 2010-06-01 22:15
carekee
阅读(995)
评论(0)
推荐(1)
摘要:
对于strcpy,sprintf,strcat这些不安全的函数的讨论应该算是不少了,大家都知道可以用strncpy,snprintf和strncat来替换它们。但实际工作中似乎这些“安全版”的函数带来的疑惑还是不小,总结了一下,列在这里。 1.sprintf(char * str, const char * format, ...) -> snprintf(char... 阅读全文
posted @ 2010-06-01 22:14
carekee
阅读(3386)
评论(0)
推荐(1)
摘要:
译者序: 本文介绍了一种在调试过程中寻找悬挂指针(野指针)的方法,这种方法是通过对new和delete运算符的重载来实现的。 这种方法不是完美的,它是以调试期的内存泄露为代价来实现的,因为文中出现的代码是绝不能出现在一个最终发布的软件产品中的,只能在调试时使用。 在VC中,在调试环境下,可以简单的通过把new替换成DEBUG_NEW来实现功能更强更方便的指针检测,详情可参考MSDN。DEBU... 阅读全文
posted @ 2010-06-01 22:14
carekee
阅读(294)
评论(0)
推荐(0)
摘要:
译者注: 本文简单介绍了使用Microsoft Visual C++中的__declspec关键字来实现“属性(Property)”这个C++中没有的特性的方法。有关__declspec关键字的更详细的信息,可以参考MSDN。 __declspec关键字不是标准C++的一部分,因此这种实现“属性”的方法只适用于Visual C++,如果想要了解在标准... 阅读全文
posted @ 2010-06-01 22:13
carekee
阅读(525)
评论(0)
推荐(0)
摘要:
摘要:本文介绍了在C++中实现“属性 (Property)”的方法,“属性”是我们在C#(或其它一些语言)中常常能用到的一种特性。这里介绍的实现方法使用的是标准的C++,没有用任何其它的语言扩展。而大部分的库或是编译器为了实现“属性”,往往对C++作一些扩展,就像我们在托管的C++或是C++ Builder中看到的那样,也有的... 阅读全文
posted @ 2010-06-01 22:12
carekee
阅读(1780)
评论(0)
推荐(0)
摘要:
问题源自一段简单的代码:在以上代码中,如果你输入:abcd,那么如你所望,你会看到"正确"的输出"c"。但是会有错误提示出现: Debug Error!Program: test.exeDAMAGE: after Normal block(#64) at 0x003429f8更离奇的是,如果将代码改为如下的代码: 如果只输入一个字符a,那么依然报错。是不是奇怪,分配了一个字符,输入了一个字符,那么... 阅读全文
posted @ 2010-06-01 22:06
carekee
阅读(397)
评论(0)
推荐(1)
摘要:
内存可以说是C和C++语言学习的关键点。这里说一点我的理解,一家之言,欢迎拍砖哈。内存要想理解透彻,首先要理解内存编址。即不同的内存条,内存模块,插到机器上,具体对应的内存地址是多少。最开始的PC机,IBM PC XT,只有640k内存。IBM是这么规划的,最低的128k,是BIOS的地址,毕竟BIOS也是汇编语言,它也需要合法地址,才能被CPU正确运行。512k~640k,被定义为端口映射地址,... 阅读全文
posted @ 2010-06-01 18:00
carekee
阅读(703)
评论(0)
推荐(1)
摘要:
C语言并不是一种很方便的语言,它的字符串就是一例。按照C语言的定义,“字符串就是一段内存空间,里面包含ASCII字符,并且,以”\0”结尾,总共能存放n-1个字符。”按照这个描述,字符串处理确实很麻烦,还很容易出错。 为了方便用户,C语言标准库向用户提供了一些字符串函数,如字符串拷贝、构造、清空等函数,在一定程度上方便了用户的使用。但是,我无意中发现... 阅读全文
posted @ 2010-06-01 17:58
carekee
阅读(664)
评论(1)
推荐(1)
摘要:
当今国互联网的飞速发展让人们获益匪浅,同时人们对于互联网的期望值也变得越来越高。这就形成了一个矛盾,虽然互联网的发展已经是相当迅猛的了,但是人们还是期望从服务器到客户终端的文件传输的速度能够比现在再快一些,这种要求(当然是合理的要求)好像从来也满足不了。在向人们询问“一种什么样的速度对于数据传输来说才是最理想的”问题时,几乎每一次你都会得到一种不同的答案:有的人认为数据传输... 阅读全文
posted @ 2010-06-01 17:50
carekee
阅读(3538)
评论(0)
推荐(0)
摘要:
早在两年前我就已经能很熟练的运用完成端口这种技术了,只是一直没有机会将它用在什么项目中,这段时间见到这种技术被过分炒作,过分的神秘化,就想写一篇解释它如何工作的文章.想告诉大家它没有传说中的那么高深难懂!有什么错误的地方还请高人指正.转载请注明出处及作者,谢谢!以一个文件传输服务端为例,在我的机器上它只起两个线程就可以为很多个个客户端同时提供文件下载服务,程序的性能会随机器内CPU个数的增加而线性... 阅读全文
posted @ 2010-06-01 17:46
carekee
阅读(1877)
评论(0)
推荐(0)
摘要:
Boost库实在是一个博大精深的库。经过实验,我发现巧用boost::bind和boost::function可以实现一些巧妙的设计。 编写过MFC程序的朋友都知道,通过资源编辑器编辑菜单项,设定菜单项ID,然后MFC内部通过该ID来映射菜单命令处理函数和菜单界面更新函数。我设想撇开MFC的资源编辑,在MFC程序中通过xml文件来进行界面配置,然后利用字符串来映射消息处理函数。借助boost库,... 阅读全文
posted @ 2010-06-01 17:03
carekee
阅读(395)
评论(0)
推荐(0)
摘要:
CSDN上有网友提问:view plaincopy to clipboardprint?int *pArray_No1,*pArray_No2,a[]={1,2,3,4}; pArray_No1=new int[10]; pArray_No2=a; cout < <sizeof(pArray_No1) < <endl //结果为4 < <sizeof(pAr... 阅读全文
posted @ 2010-06-01 17:02
carekee
阅读(498)
评论(0)
推荐(0)
摘要:
请注意,这里我所说的动态数组不是指你自己new 出来的数组,而是指STL 中的std::vector 和MFC 中的CArray 之类的容器。开始以为使用std::vector 不过是免除动态内存之苦。免除自己手动开辟和释放内存是一方面,实际上在使用的过程中你会逐渐发现使用std::vector 的好处。今天我就发现了一个好处。今天我修改别人写的一个图像匹配算法,所谓图像匹配就是找出两幅图像中相同... 阅读全文
posted @ 2010-06-01 17:01
carekee
阅读(992)
评论(0)
推荐(1)
摘要:
在MFC工程(包括单文档、多文档、基于对话框、MFC DLL等)调试程序时可以使用trace宏来输出相关变量的值,在Win 32工程(包括Win32 Application和Win 32DLL)只能使用OutputDebugString函数来输出相关变量值。但是我觉得OutputDebugString比起trace宏有很大的不足,OutputDebugString不能像trace宏一样格式化输出,... 阅读全文
posted @ 2010-06-01 16:58
carekee
阅读(702)
评论(0)
推荐(0)
摘要:
对话框DoModal()函数调用失败一般而言有两种表现形式:一是对话框弹不出来,但是没有错误提示;二是对话框弹不出来,同时伴随内存访问错误的提示框出现。第一种表现主要是因为没有对资源句柄进行切换造成的,以在DLL中弹出对话框中最为常见。解决办法是:如果是MFC规则DLL,可以使用所有导出函数的开始处添加 AFX_MANAGE_STATE宏,具体代码为:AFX_MANAGE_STATE(AfxGet... 阅读全文
posted @ 2010-06-01 16:58
carekee
阅读(4254)
评论(1)
推荐(0)
摘要:
Windows环境下读写文件一般有下列有下面几种方式:C语言的文件操作函数,如fopen函数等,C++的I/O流库,Win32 API的文件操作函数,如CreateFile()、WriteFile()、ReadFile(),MFC的文件操作类,如CFile和CStdioFile等等。但是在大型的数据文件,上面的文件处理方法是不太适合的。对于大文件的操作一般是以内存映射文件来加以处理的。为此本人以读... 阅读全文
posted @ 2010-06-01 16:56
carekee
阅读(475)
评论(0)
推荐(0)
摘要:
一个朋友向我请教一个程序,相关代码如下: string s; vector <string> vs; ifstream inFile("F:\\MyReceiveFiles\\FillCompo_KP.mod", ios::in); while (getline(inFile, s)) vs.push_back(s); cout<<vs.size()<<endl... 阅读全文
posted @ 2010-06-01 16:55
carekee
阅读(2163)
评论(0)
推荐(1)
摘要:
前言:dbf文件是一种著名的数据库文件,其特点是可以记录单个数据表的数据。Maozefa大侠曾经写过两篇文章论述如何操作dbf文件:《C++老代码 -- DBF数据文件操作类DBFile》(http://blog.csdn.net/maozefa/archive/2007/09/16/1787074.aspx)和C语言版的DBF本地数据库文件操作函数(http://blog.csdn.net/ma... 阅读全文
posted @ 2010-06-01 16:41
carekee
阅读(1484)
评论(0)
推荐(0)
摘要:
1. 你们的项目组使用源代码管理工具了么? 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。2. 你们的项目组使用缺陷管理系统了么? 应该用。ClearQuest太复杂,我的推荐是BugZilla。3. 你们的测试组还在用Word写测试用例么? 不要用Word写测试用例(Test Case)。应该用一个专门的系统,可以是T... 阅读全文
posted @ 2010-06-01 15:59
carekee
阅读(229)
评论(0)
推荐(0)
摘要:
在软件行业中,个人觉得每个Coder、Leader(那些当了Leader以后就不需要Code的除外)都应该除了具有良好的编码能力以外,最为主要的就是Debug的能力要坚实。千万不要告诉我Debug工作是Tester和QA的事情,首先你要认识到Debug的能力是一个并不简单的能力,能帮助你提高你的开发能力,加快开发速度,节约开发成本;其次你更应该知道,你所掌握的Debug的能力和技术并不可能抢去Te... 阅读全文
posted @ 2010-06-01 15:42
carekee
阅读(297)
评论(0)
推荐(0)
摘要:
【51CTO.com独家特稿】十五个秘决搞定你想要的晋升,拿到你应得的薪水怎样评定一名软件开发人员?这是一个颇为奇怪的问题。现在已经有了很多的理论和形式来做这件事,人力资源部门也试着帮你管理和反省自己的行为。然而,怎样才是一个伟大的软件开发人员,在今天,你该怎样发展你的职业生涯?以下是我评定团队中软件开发人员的“军规”。按照这些技巧和规则,你可以改善你的现状,由一个优秀的程... 阅读全文
posted @ 2010-06-01 15:40
carekee
阅读(203)
评论(0)
推荐(0)
摘要:
法律条款都公开 但律师照样赚钱! 医学知识都公开 但医生照样赚钱! 软件行业由于其技术的特殊性,软件存在源代码与二进制代码之分,存在编译过程。导致源代码一直成为盈利的一个新卖点。但任何行业都一样,都存在一个发展和变迁的过程。软件行业也是如此。 如今开源软件已经在全球范围内迅猛发展。开源产品已经完全可以替代现有商业软件。 包括操作系统Linux,浏览器FireFox,开源ERP/CRM信息化... 阅读全文
posted @ 2010-06-01 15:35
carekee
阅读(1420)
评论(0)
推荐(0)
摘要:
GDI+是GDI的升级版本。在VC6.0中并没有配备GDI+的相关文件。那么如何在VC6.0使用GDI+呢?我从网上搜索了一些资料,并结合自己的使用,总结出一下两种方法。下面我各建一个MFC工程介绍这两种做法。1. 找到GDI+库文件和头文件,把它放到一个文件夹GDI+Files。这个文件夹包括30个头文件和一个库文件。2.新建一个单文档工程“UseGdiPlus”,把文件... 阅读全文
posted @ 2010-06-01 15:34
carekee
阅读(1765)
评论(0)
推荐(0)
摘要:
自己总是用VC平台来开发东西,但是有时候总是出这样那样的问题,呵呵,总是需要上网查资料来解决,在这里把自己用到上网查的一些技巧摘录如下,希望对大家有用,省去大家再去搜索的烦恼。1.如何在Release状态下进行调试Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations... 阅读全文
posted @ 2010-06-01 15:33
carekee
阅读(264)
评论(0)
推荐(0)
摘要:
开发环境 –Turbo c DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:) –Visual C++ 6.0/7.0 稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不错,比如:Spy++。但编译器较... 阅读全文
posted @ 2010-06-01 15:22
carekee
阅读(267)
评论(0)
推荐(0)
摘要:
因为一种特别的需要 做了一个小程序主要三个功能设置窗体透明void CSetDlg::SetTransparent(){ ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);//TopMost SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong... 阅读全文
posted @ 2010-06-01 13:52
carekee
阅读(1518)
评论(0)
推荐(0)
摘要:
在VC中使用ListCtrl保存上线主机SOCKET句柄我知道在BCB中的列表框有一个DATE项,昨天晚上在群里草草说VC的ListCtrl也可以存入一个DWORD类型的数据,这让我很高兴因为,当时我正为如何处理上线主机的SOCKET列表而头疼,而SOCKET是 unsigned long类型的,也就是说可以把上线的主机存在ListCtrl中,而使用这个方法可以搞定了保存SOCKET数据int n... 阅读全文
posted @ 2010-06-01 13:50
carekee
阅读(334)
评论(0)
推荐(0)
摘要:
要把自己的DLL注入到所有进程,在Win7和Vista下的环境使用远程线程,比较费力气因为数据执行保护(DEP)有防御最后选择消息钩子来实现。1.钩子中对HOOK消息的处理部分要在DLL中实现,然后导出这个函数比如HookProc2.HookProc中要使用CallNextHookEx(G_HHOOK, nCode, wParam, lParam);把消息向下传递3.在CallNextHookEx... 阅读全文
posted @ 2010-06-01 13:49
carekee
阅读(280)
评论(0)
推荐(1)
摘要:
程序做成模块的方式,层层调用是非常好的编程风格,做成模块一般分为动态调用的DLL模块,另一种是静态LIB模块。静态LIB编译后的程序不用附带DLL程序比较方便,编写LIB的方法是这样的以VS6为例子1.在VS6中创建一个静态LIB的项目2.添加一个头文件lib.h3.添加一个实现文件lib.cpp4.在lib.h中声明要导出的函数比如view plaincopy to clipboardprint... 阅读全文
posted @ 2010-06-01 13:48
carekee
阅读(244)
评论(0)
推荐(0)
摘要:
首先说明VC中CListCtrl的排序功能非常麻烦,如果有选择的话可以使用第三方的类比如CListCtrlEx等下面来说在VC中标准的CListCtrl是怎么样排序的 我做这个主要用在一远程文件管理的 文件列表排序中 1.排序函数的原型 在CListCtrl中有一个成员函数叫SortItems它接收两个参数一个是用于比如的回调函数另一个是要排序的list指针 2.回调函数的原型 回调函数是这个样子... 阅读全文
posted @ 2010-06-01 13:46
carekee
阅读(5806)
评论(0)
推荐(1)
摘要:
1. 在.H文件中定义protected:void OnDrawColorForMyList( NMHDR* pNmHdr, LRESULT *pResult );2.在.CPP中加入消息映射ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST, OnDrawColorForMyList ) //为改变颜色添加的消息3.在.CPP中加入函数定义//改变 m_List 控件单行的颜色... 阅读全文
posted @ 2010-06-01 13:45
carekee
阅读(747)
评论(0)
推荐(0)
摘要:
Download demo source - 726.17 KB IntroductionIn order to help mitigate the risk of cross-site scripting, a new feature has been introduced in Microsoft Internet Explorer 6 SP1. This feature is a new ... 阅读全文
posted @ 2010-06-01 11:44
carekee
阅读(1820)
评论(0)
推荐(0)
摘要:
Download .NET demo (WinForms) - 280 KB Download .NET source code (WinForms) - 175 KB Download Native C++ demo (MFC VS2008) - 1.27 MB Download Native C++ source (MFC VS2008) - 299 KB Download Native C+... 阅读全文
posted @ 2010-06-01 11:38
carekee
阅读(890)
评论(0)
推荐(0)
摘要:
项目中需要分类日志功能,且日志由多个进程产生,所以写了这个类。#ifndef CAPPLOG_H_#define CAPPLOG_H_#include "Generic.h"enum LOG_TYPE{ LOG_DEAGNOSTIC_MSG = 0x00000000, LOG_EVENT = 0x00000001, LOG_ACTIVITY = 0x00000002, LOG_ERROR = 0x... 阅读全文
posted @ 2010-06-01 09:30
carekee
阅读(637)
评论(0)
推荐(0)
摘要:
第一招虚函数通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下:class base{public: virtual ~base(){} virtual void fun() { cout << "基本功能" << endl; }};class derive:public base{public: void fun() { cout << "扩展功能... 阅读全文
posted @ 2010-06-01 09:28
carekee
阅读(1407)
评论(0)
推荐(1)
摘要:
多线程下载文件这个话题已经是老汤了。在HTTP协议1.1中,允许通过增加一个HTTP Header“Range”来指定下载文件的区间。所以一般的做法都是:首先获取到文件大小(通过Content-Length)开一个线程池在进行分块下载。而在具体怎么实现的流程上,还是有差别的。1. 标准的做法是:首先用一个线程发送HTTP GET指令,服务器会返回Content-Length... 阅读全文
posted @ 2010-06-01 09:26
carekee
阅读(1594)
评论(0)
推荐(0)
摘要:
最近抽空用VC写了一个小应用程序。主要功能就是创建进程,并到该进程的主窗口句柄,然后再给该窗口发消息。下面把代码共享给大家。HWND CreateMyProcess() { // 进程启动信息 STARTUPINFO si; memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags =... 阅读全文
posted @ 2010-06-01 00:16
carekee
阅读(4392)
评论(0)
推荐(1)
摘要:
我那篇《程序只启动一个实例的几种方法》发表后被推荐到了CSDN首页,有不少网友看了之后提出了一些很好的建议。其中有个网友说可以用共享变量法,我上网收集了一些资料,又经过代码测试,现在补充一下这种方法: 五,共享变量法 首先,在App类的cpp文件开头加上下面的代码:#pragma data_seg("StarLee") // 自己定义的数据段 char nInstanceCount = -1; /... 阅读全文
posted @ 2010-06-01 00:15
carekee
阅读(328)
评论(0)
推荐(0)
摘要:
我们知道,在Windows中的每个进程都有自己独立的内存空间。该独立的内存空间包含了所有的可执行模块或DLL模块的代码和数据以及动态内存分配的空间。每个进程的内存空间只能被该进程访问,其他进程是不能访问的。 如果我们要想在进程间共享内存(也就是创建一块不同进程都能访问的内存),那就必须使用内核对象。因为内核对象由Windows系统内核所拥有,而不是由进程所拥有。 下面就用文件映射(File Map... 阅读全文
posted @ 2010-06-01 00:15
carekee
阅读(1063)
评论(0)
推荐(0)
摘要:
有些时候,我们要求一个程序在系统中只能启动一个实例。比如,Windows自带的播放软件Windows Medea Player在Windows里就只能启动一个实例。原因很简单,如果同时启动几个实例,却播放不同的文件,那么声音和图像就会引起混乱。在设计模式中,就有一个SINGLETON模式,该模式就是让类只有一个实例。(关于SINGLETON模式,可以看我那篇《重读《设计模式》之学习笔记(三)--S... 阅读全文
posted @ 2010-06-01 00:14
carekee
阅读(670)
评论(0)
推荐(1)
摘要:
在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。如果控件比较少,那可以在对话框的OnSize()事件里面添加代码,通过计算来调整各个控件的位置和大小;但是,如果对话框上的控件比较多的话,那这将是一件非常痛苦的事情!要是程序中又有很多可以改变大小的对话框,那一个一个的OnSize()写下来,那会使程序员崩溃的! ... 阅读全文
posted @ 2010-06-01 00:13
carekee
阅读(332)
评论(0)
推荐(1)
摘要:
现在有很多软件都支持拖拽功能,就是用鼠标拖着文件放到软件窗口中某个位置,软件就可以做出相应的反应。比如,Windows自带的播放软件Windows Media Player,你可以拖着一个媒体文件放到它的主窗口中,它就会开始播放这个文件。 怎么让自己的软件也有这个功能呢? 其实,并不是很难,只要让你需要有拖拽功能的控件响应WM_DROPFILES消息就行了。下面以Edit控件和ListBox控件为... 阅读全文
posted @ 2010-06-01 00:13
carekee
阅读(1255)
评论(0)
推荐(0)
摘要:
1.让List Control有Check Box用SetExtendedStyle方法可以设置,看代码:(CListCtrl m_ListCtrl;)DWORD dwStyle = m_ListCtrl.GetStyle();dwStyle |= LVS_EX_CHECKBOXES;m_ListCtrl.SetExtendedStyle(dwStyle);2.让List Box有Check Bo... 阅读全文
posted @ 2010-06-01 00:12
carekee
阅读(285)
评论(0)
推荐(0)
摘要:
VC中的Slider的Tooltips只能显示表示当前位置的int型值,可是有时候,这种Tooltips并不够用。比如,在一个视频录制的小软件中,可能会需要类似“总共500帧,当前是第13帧”的Tooltips;或者有些时候想在Tooltips中显示float型的值。 在这些时候我们就只能用CToolTipCtrl配合TTN_NEEDTEXT消息来实现我们的定制Toolt... 阅读全文
posted @ 2010-06-01 00:11
carekee
阅读(495)
评论(0)
推荐(0)
浙公网安备 33010602011771号