摘要:
回调函数中调用类中的非静态成员变量或非静态成员函数【问题】如何在类中封装回调函数?a.回调函数只能是全局的或是静态的;b.全局函数会破坏类的封装性,故不予采用;c.静态函数只能访问类的静态成员,不能访问类中非静态成员。1. 如何让静态函数访问类的非静态成员。 a.声明一静态函数a(),将类实例对象指针做为参数传入。如:class A() { static void a(A *); //静态函数 void b(); //非静态函数 }void A::a(A * pThis){ pThis->b(); //静态函数中调用非静态函数 } b.回调函数中... 阅读全文
摘要:
前几天发现自己的程序中使用非模态对话框,Debug版本有警告提示如下: Warning: calling DestroyWindow in CWnd::~CWnd OnDestroy or PostNcDestroy in derived class will not be called 由于是Warnning,就没有太在意,后来随意上网一找发现,这个问题还是很严重的问题。 最后,发现有些基本问题我还没有搞清楚。同时在这个过程中,也学习了不少新东西,网上关于这个问题的资料很多,感觉真正把问题讲清楚的不多。今天我就来个总结,同时,也把网上有些人的疑问给解答下,更重要的是自己以后忘记了,... 阅读全文
摘要:
1>c:\program files\microsoft sdks\windows\v6.0a\include\netioapi.h(155) : error C2146: 语法错误 : 缺少“;”(在标识符“PhysicalMediumType”的前面)。错误发生在 NDIS_PHYSICAL_MEDIUM PhysicalMediumType 这一句上。网上有一些解析,说这是因为VS2008对ntddndis.h里头的定义比较新,WinPcap的头文件在对ntddndis.h的编译过后没有获得相应的定义,故NDIS_PHYSICAL_MEDIUM不是一个结构或类,所以就产生了缺少“; 阅读全文
摘要:
error C2440: “static_cast”: 无法从“UINT (__thiscall CSizingControlBar::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)” f:\tools\4bands ifx_xmm2130_ft\common\sizecbar.cpp 109CWnd类,afx_msg LRESULT OnNcHitTest(CPoint point);而在CSizingControlBar中是afx_msg UINT OnNcHitTest(CPoint point);只要将这些UINT替换为LRE 阅读全文
摘要:
一、前期准备:1.安装VS20082.安装VM8.0,在安装过程中勾选安装Integrated Virtual Debugger(有的时候安装之后vs2008不一定会出现VMware的工具栏,这是需要重新安装VMware。如果一直出现vs打开时提示“加载失败,是否移除”,这时需要打上vs2008补丁sp1然后再次重新安装VMware)3. 创建一个windows操作系统的虚拟机4.在windows操作系统的虚拟机中安装VMTools二、配置将要调试的虚拟机:1. 虚拟机新建一个有管理员权限的帐号,帐号名必须与本机一样。必须设置密码,密码必须与本机同帐号的密码一样。(不然会一直在报 0x8000 阅读全文
摘要:
1、判断文件是否存在 _access, _waccess:http://msdn.microsoft.com/en-us/library/1w06ktdy(v=vs.80).aspx2、判断文件是否正在使用 1)若文件不是被独占方式打开,那么这个不好判断 2)如文件是被独占方式打开,那么再次以独占方式打开就搞定了。 3)不管独占与否:枚举系统先有句柄handle,从0~4096,间隔4。 当然这里要注意其他程序是否在这期间对文件是否进行操作 for(DWORD i = 0; i < 4096; i +=4 ) // 找到之后根据GetModuleFileName即可 源码... 阅读全文
摘要:
书目详情请见:C语言大学实用教程/21世纪大学计算机系列教材1、运算符的结合性概念是什么? m = -n++; // 当n=3时,m=_?_; 自己去实际验证吧!2、测试程序只能证明程序有错,而不能证明程序无错。 当项目经理问程序猿“bug什么时候能修完?”的时候,程序猿应该紧紧抱住项目经理说:“我真没用,竟然让你问这样的问题!”——这就是真理3、增量测试 又叫“探索测试” ? 测试人员建立测试的效率常常受到以往测试结果的影响。这种方法称为探索测试法(Exploratory Testing),是确定如何测试的第一步。 探索应用程序以及熟悉应用程序的功能是学习过程中的一个必要的... 阅读全文
摘要:
首先看一下xp风格与非xp风格: 非xp风格 xp风格------------------------------------------------------------------------------------------------------------有三种方法。法一(推荐):采用Unicode工程,在属性的manifest tool里设置,或者直接在stdafx.h里加上:#ifdef _UNICODE#if defined _M_IX86#pragma comment(linker,"/manifestdependency:/"type='wi 阅读全文
摘要:
这个是因为你的设置有问题。解决方法如下:解决方案一:项目->属性->链接器->常规 下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”。不过这又引入了另外一个警 告:FormatCom.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/INCREMENTAL:NO”规范)选择项目,属性->配置属性 ->C/C++,修改“调试信息格式”为“程序数据库(/Zi)”即可。解决方案二:下载“VS90-KB948127.exe” 来解决问题vs2008 -fatal erro 阅读全文
摘要:
在Windows注册表操作的API中,如果参数有"__out_opt LPDWORD pdwType",那么"pdwType"则是保存的为键值的类型。注册表中键值类型的分类:ValueTypeREG_BINARYBinary data in any form.REG_DWORDA 32-bit number.REG_DWORD_LITTLE_ENDIANA 32-bit number in little-endian format.Windows is designed to run on little-endian computer architect 阅读全文
摘要:
同样是今天,在使用这个函数RegOpenKeyEx的时候,老是执行不成功,函数本身返回2,GetLastError返回0。在CSDN上查阅资料说是返回2的原因是注册表中对应路径不存在,可是我电脑中注册表那个键值明明存在的。就这样慢慢调试,换个键值查询,用VC6、VS2010(本来是用vs2008),可是在vc6下不管查询什麽简直都能成功,折腾了半天时间,最后还是不行。 最后在分析代码的时候,觉得代码有问题,于是终于发现了:我用的是TCHAR!!!而且函数我用的是RegOpenKeyExA!!!原因就在这里!!! 所以我觉得RegOpenKeyEx返回2的原因一是路径真的不存在,二是参数... 阅读全文
摘要:
今天在写一个测试程序的时候,使用SHGetFolderPath获取用户数据目录,在本机运行时能成功,但是放进虚拟机测试的却返回错误代码5,拒绝访问。 同样是win7 32位。本机的UAC是最低,测试机的UAC是默认的。当时稍微查阅资料大概说是权限问题,于是将测试机的UAC设置为最低,这时程序能正常运行,但是返回的路径却不是我要的“C:\Users\Admin\AppData\Roaming”,而是一个"c:\windows\"下面的路径,很是纳闷。 后来想到既然不能用api函数直接获取,那么可以从注册表中读取。相关注册表值见“HKEY_CURRENT_USER\Softwa 阅读全文
摘要:
Windows开机和关机慢,很多时候慢得令人抓狂。特别是做嵌入式开发时(如XPE和WinCE),任谁都无法忍受开发出来的设备开关机的蜗牛速度。所以我们得为她加速。采用HORM是不错的方案,因为是直接从休眠文件中恢复系统现场,开机速度快了不少。采用HORM方案后,Windows默认的关机过程中,很多步骤对我们的设备来说,是完全不需要的,我们需要直接断电关机。本文将分析Windows的关机过程,然后介绍如何使用Windows未公开的API实现直接断电关机。 一、Windows关机过程 简单地说,在Windows关机时,系统做了以下工作: 1. 软保护首先先结束登录用户打开的所有程序,保存... 阅读全文
摘要:
void maxx(int a, int b, int c){ printf("%d, %d, %d\n", a, b, c);}int main(int argc, _TCHAR* argv[]){ int i = 1; printf("%d\n", i++); maxx(i, ++i, i); puts(" "); maxx(i++, ++i, i); return 0;} 在原来的笔试题基础上稍微改动了一下,但和原题基本一致。答案如下折叠代码(请不要轻易打开:) )View Code 13, 3, 34, 5, 5 麻烦相同了的 阅读全文
摘要:
在使用Windows程序的时候,相信没有用户喜欢看到程序突然崩溃的情形吧!为了避免程序崩溃,程序员在编写程序的时候最好在容易出错的地方使用异常处理机制来保证友好的用户体验。特别是编写C/C++代码的时候,崩溃是经常的事情! 今天一位同事给我说,编写C/C++代码崩溃的原因主要是因为内存操作违规。如果每次操作一块内存或指针之前都检查内存或指针是否有效,那么可以降低程序崩溃的次数。但是这会让程序员很厌烦的,哈哈。所以在适当的地方加上异常处理,即使崩溃也会让程序员更好的改善程序。当然,程序效率必然降低! 幸好C++规范中有异常处理机制: try catch 但是在Visual Studio... 阅读全文