C++
文章平均质量分 61
bengold1979
这个作者很懒,什么都没留下…
展开
-
WinCE6 RIL驱动开发日志(五)
记录两个问题; 其一:自己的驱动每次都不能正常加载到内核,总是需要重新拷贝或用CAB安装。后来仔细研究后发现,原来是放在 MODULES下面的原因。只要移到FILES下面就好了。这两者的区别以后再仔细研究一下; 其二:短信发送;直接调用RIL_SendMsg就可以了。不过这个函数中的最后一个参数有些复杂,需要设置和注意的变量赋值较多。可参考网上有其他前人写的博客原创 2012-11-24 21:18:45 · 830 阅读 · 0 评论 -
C++中用struct来作为接口的传递参数
可能对很多C++程序员来说,本来这算不上什么很高深的东西。不过之于我来所说,还是第一次这样传递参数。 起因是我的一个模块有多个函数内部代码类似,技术牛人也是我的直接领导让我用函数模板。晃晃悠悠我用模板完成之后发给他复查。再要求我用结构体来处理每个不同函数的参数,并且对结构体成员赋值要放到构造函数中。我试着按他的思路作了后,发现果然每个接口内部的代码立刻变得简洁很多,而且也利于维护了。原创 2008-10-17 21:24:00 · 4903 阅读 · 2 评论 -
WM6SDK例子学习笔记(一)
在WM6 SDK的通用例子中有一个basicapp的例子。运行的效果就是在WM上出现一个窗口,显示一幅图片,下面左软按键可以切换图片。例子的功能很简单,作为入门学习很好。 下面,我按照自己的理解将这个例子详细分析。 这个例子属于Native的方式,其含义是基本使用的是API编程,而不是基于其他框架开发。也可以叫做“原生态”开发方式。因此有自己的特殊宏定义:#define WIN原创 2008-09-19 13:06:00 · 1294 阅读 · 0 评论 -
注册后自动关闭并重启程序
最开始增加注册功能的时候,都是弹出提示窗口,让用户自己关闭程序,然后再重启。结果有人说提示窗口说“注册完成,请重新启动软件”的意思就是证明已经注册成功了。但是重启之后可能没有注册成功。遇到这种情况我简直无语。我在提示中只说明,注册动作完成了,至于注册码是否是有效的,必须通过重启软件查看才知道。另外还有人说,最好能注册完后自动关闭并重启。典型一个懒人,我真想踹他一脚。可是后来我发现,原创 2008-06-25 10:45:00 · 2975 阅读 · 0 评论 -
结构化异常处理概念
SEH in the Buff 若将 SEH 的细节都放到一起讨论,任务实在艰巨,因此,我会从简单的开始,一层一层往深里讲。如果之前从未使用过结构化异常处理,则正好心无杂念。若是用过,那就要努力将 _try、GetExceptionCode 和转载 2008-06-25 09:33:00 · 2150 阅读 · 0 评论 -
CFileDialog程序异常退出问题
我维护的一个工具,有一个参考VCKbase网站上的资料,生成一个win2000风格的文件选择对话框功能。在之前使用的都是好好的。后来有人反馈会自动退出,没有任何其他反馈提示信息。我实地察看了一下,现象很奇怪。当对话框选择路径为桌面的时候,就一定会自动退出。非桌面路径选择的时候,不会出现。 我仔细观察了她的使用环境,桌面上图标很多。那么这是原因之一了。在自己机器桌面原创 2008-06-24 19:30:00 · 3531 阅读 · 1 评论 -
开发 Windows Mobile 应用程序: FAQ
最近入手一台水货838,对WM的应用开发忽然产生了一点兴趣,准备开始自己学习这方面的知识。首先转一篇微软相关文章作为入门吧。原文地址:http://msdn.microsoft.com/zh-cn/library/ms838180.aspx开发 Windows Mobile 应用程序: FAQ 发布日期 : 3/1/2005 | 更新日期 : 3/1/2005 Microsoft C转载 2008-08-29 14:16:00 · 855 阅读 · 0 评论 -
CMarkup学习之方法说明
最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象之深,让我至今都无法忘怀。现在想在C++下发掘XML的强大,结果却发现建房子你除了需要基本的建设材料外,还需要些而外的工具。不像C#那样,已经打成包供你直接使用了。好在有知道CMarkup这个小型XML的分析器,可以为我所用。俗话说:磨刀不误砍柴原创 2008-06-02 20:41:00 · 1928 阅读 · 5 评论 -
static_cast一点小知识
现在C++用的比较多的是类型的转换,其中static_cast使用的比较频繁。有个人碰到个问题问我为什么下面的用法编译时会报错:/**//** dwSize是一个已知的值 */BYTE* tmp = new BYTE[dwSize];/**//** AStructType是一个接口体名称 */AStructType* pSt = static_castAStructType原创 2008-05-28 14:44:00 · 717 阅读 · 0 评论 -
一个提升代码执行权限的例子
同事在测试工具在Vista下运行的时候,无意中发现工具报了一个调用"msflxgrd.ocx"出错。因为ocx是控件,如果在运行前不注册的话,有可能该控件无法使用。于是我在Vista上尝试手工注册之(“regsvr32 msflxgrd.ocx”),结果报错。根据错误代码在网上查到的原因是,没有权限。 那么很明显是因为我登陆的帐户没有管理员权限。看来Vista系统在用户权限上比以前的原创 2008-08-07 17:46:00 · 1167 阅读 · 0 评论 -
Ubuntu8.04搭建C++开发环境
今天搭建C++开发环境出了点小插曲。我已经按照网上的指导下载了GCC的编译器和各种库文件。开始编了个Hello入门例子,如下:#include iostream>using namespace std;int main()...{ cout "Hello Ubuntu!" endl; return 0;}源代码保存为test.cpp。在终端命令行下输入:原创 2008-05-18 17:22:00 · 1261 阅读 · 0 评论 -
设计模式之简单工厂
GoF的设计模式一经推出,就引起了各路诸侯的严重关注。从JAVA到C#再到C++,甚至连面向过程为主的C都想染指一番。今天,就从C#出发,推导出C++的代码,并用一个C++的ATM模拟程序来实作(这个词好像是从侯捷先生那学来的,如果我记错了,希望他不会怪我,呵呵)。 我们首先看看简单工厂来描述一个四则运算的UML类图。 呵呵,发现在Ubuntu下使用Firefox原创 2008-11-18 08:38:00 · 1418 阅读 · 0 评论 -
C++中关于new的用法
前天参加了科室的初级职称考试,内容当然是围绕C++和一些简单相关平台的知识。其中有一道判断题:new得到的内存一定是在堆上。答案是否定的。 这道题我错了,而且好像还有几个同事和我犯了一样的错误。后来在一个C++学习群里,找人讨论了一下,自己写了几行代码验证了一下。结论是:可能得到静态区域地址或栈上地址。 理论基础:new(buf) Type()得到的内存地址就是在b原创 2008-11-23 10:19:00 · 1038 阅读 · 0 评论 -
ATM模拟演示软件之通信组件
从今天起,决定自己做个ATM的模拟演示软件。在设计中尽量考虑用设计模式来处理,也是为了巩固自己这段时间看设计模式书籍的成果。另外该演示软件主要专注于核心功能,界面展示这个层次只用console来处理。核心模块尽量做成DLL,可以方便上层使用任何语言来调用构建UI。 今天先设计一个socket来处理通信组件模块。ATM演示软件系统需要包括一个服务端和一个客户端。尽管功能简单,但原创 2008-11-23 17:26:00 · 1139 阅读 · 0 评论 -
WinCE6 RIL驱动开发日志(四)
这两天通过反复打印日志终于解决了RIL_Dial不能将AT指令发到串口的问题。因为之前在网上看前人做RIL层驱动开发时,都没有提到过类似的问题。具体问题描述如下: RIL层驱动成功加载后,写一个WinCE的APP,先调用RIL_Initialize接口做RIL初始化操作。然后直接调用RIL_Dial来进行拨号,但是没有成功。通过日志来看,确定是由于由一个全局变量gRadioOff原创 2012-11-10 23:04:19 · 1024 阅读 · 0 评论 -
WinCE的RIL驱动开发日志(二)
熟悉WINCE的RIL层开发已经有一段时间了。从之前什么都不懂,到现在有点感觉了。基本搞清楚WINCE下RIL层驱动开发要做什么具体工作了。下面整理一下我的思路,抛砖引玉供大家参考。如有描述不周的地方也希望各位指正。 第一步是要在组件中添加ril组件。这样在系统中会添加ril.dll库。我理解这个dll库包含了RIL的MDD层。然后将模拟平台中PDD目录拷贝到实际硬件平台下面,编原创 2012-10-21 21:57:20 · 1203 阅读 · 0 评论 -
等额还款本金法
等额还款本金法类声明:#ifndef RETURNSAMECAPITAL_H_INCLUDED#define RETURNSAMECAPITAL_H_INCLUDED#include "LoanBase.h"/** /brief class CReturnSameCapital * Description: 等额本金还款类; */class CReturnSameCapital原创 2009-05-24 16:45:00 · 1019 阅读 · 0 评论 -
等额本息还款公式
贷款计算基类:#ifndef CLOANBASE_H_INCLUDED#define CLOANBASE_H_INCLUDED#include #include #include class CLoanException : public std::exception{ std::string m_str;public: CLoanExcepti原创 2009-05-18 17:56:00 · 2100 阅读 · 0 评论 -
一个自定义备份数据格式
备份数据的数据格式数据头 数据包(包含设备当前版本的XML和关键NV参数) CRC校验值数据头结构: 序号 数据长度(BYTE) 数据含义 典型取值1 8 备份数据头 “ZTEMTVER”2 1原创 2009-07-21 14:20:00 · 823 阅读 · 0 评论 -
一个素数算法
上次面试中最后一道题跟计算素数有关。尽管我写出了总体思路,但实质上并不会写算素数的算法。今天在看事件机制的资料的时候,看到一个求素数的算法。特地记录下来,以备用。 //////////////////// Helper fn to test if number p is prime:// Try dividing by all primes found so far, u原创 2009-05-11 16:51:00 · 728 阅读 · 0 评论 -
使用C++流对象打开文件的注意事项
用C++的流对象操作文件时,如果文件路径包含中文字符可能会出错。需要设置中文环境才能正确打开文件。解决方式如下:std::locale loc = std::locale::global(std::locale(""));m_s.open(m_str.c_str());std::locale::global(loc); 加上了这个类似设置环境变量的语句后,打开文件的路径中包含中原创 2009-05-08 19:12:00 · 1068 阅读 · 0 评论 -
google test09年5月30升级到1.3.0版本
google test最新版本1.3.0已于5月30日提交用对比工具对比了一下与1.2.1的差异。头文件和实现文件都有些变化。我们来具体看看两个版本中有何差异:gtest-death-test-internal.h文件变动1、用宏GTEST_HAS_DEATH_TEST && GTEST_OS_WINDOWS控制io.h头文件的包含。2、原创 2009-07-16 11:08:00 · 824 阅读 · 0 评论 -
在Ubuntu8.04下用CB的C++调用Python3.0代码
最近比较忙,好久没有在博客上更新自己的技术文章了。这两天研究了一下C++调用Python的实现,也算是跟上时代的潮流吧。毕竟用编译型语言调用解释型语言,能给程序带来极大的扩展性。高通作的生产配置工具(QPST)里面有个很重要的功能,就是支持perl脚本来完成一些生产支持工作。我们的仿照程序则是简单的C++再实现。当出现新需求时,唯一的办法是重新编码,然后编译,测试,发布。当出现软件原创 2009-04-10 22:02:00 · 1352 阅读 · 0 评论 -
阅读《反模式》一书后感
反模式,是什么?估计很多人第一眼看到这个词会和我一样感到奇怪和困惑。这种困惑在我看完此书的简要介绍后变的更浓了。因为我已经被里面纷繁复杂的名词和解释搞晕掉了。本来我都有些想放弃这本书的阅读了,不过想想领导说看完书后要给大家讲讲收获的,我又在借阅单上写了自己的名字。如果什么都没有得到就不看了,到时候我如何和大家交流读后感呢?我只能硬着头皮往后看。 当这本书,我开始看原创 2009-02-06 21:06:00 · 994 阅读 · 0 评论 -
DLL共享变量方法
前段时间,有人问我,动态链接库被多个进程加载的话,是有几个副本。当时我想了想说,动态加载方式肯定是一个进程对应一个副本。静态的不清楚。后来经过咨询和在网上浏览资料发现:其实DLL不管哪种方式加载都是将副本加载到进程空间中。 正常编译下的dll,它的变量使用到的内存是独立的。比如你同时运行两个调用了某个dll的用户程序,试图对某一个在dll中定义的全局变量修改赋值的时候,两个程序里的变原创 2008-07-30 17:50:00 · 5723 阅读 · 0 评论 -
设计模式解决的问题
初学设计模式的时候,并不知道它能带来怎样的惊喜。只有当你积累到一定程度,作系统设计的时候,才能体会到其精妙之处。而这等精妙之于辈还停留在窥探之境的人来说,似乎是“不识庐山真面目”。为了让自己能对其有个通体了解,明白其解决问题的思路,特摘抄了一段关于描述一些导致重新设计的一般原因,以及解决这些问题的设计模式:(注明摘抄自《设计模式——可复用面向对象软件的基础,机械工业出版社》一书,第原创 2008-05-16 09:11:00 · 1521 阅读 · 0 评论 -
CFile打开文件模式总结
知识和技能需要在平时点点滴滴的过程中不断积累的,所以自己要加强这方面的总结和积聚。下面将总结CFile类打开文件模式的分类及具体说明。CFile::modeCreate 直接构建创建一个新文件。如果该文件已经存在,则文件内容自动被清零。CFile::modeNoTruncate 该值一般modeCreate组合使用。如果创建的文原创 2008-05-16 10:24:00 · 13919 阅读 · 0 评论 -
C++学习笔记(七)
今天来学习一下拷贝构造函数。主要参考资料为《C++编程思想 第2版 第I卷》中第十一章节。 拷贝构造函数由引用引起的。在函数调用时,这个构造函数是控制通过传值方式传递和返回用户定义类型的根本所在。编译器在没有提供拷贝构造函数时将会自动地创建。 在C语言中的传值方式,其本质是按位拷贝参数到堆栈中的函数参数地址。有这样一个例子:#includ原创 2007-11-16 09:33:00 · 566 阅读 · 0 评论 -
多线程开发学习笔记之线程同步——临界区
在有几个线程并行运行的环境中,同步不同线程的活动是非常重要的。一般说来,一个线程使自己与另一个线程同步的方法是让自己睡眠。但线程睡眠时,操作系统不再为它调度CPU时间,因此它停止了执行。不过,就在它睡眠之前,它告诉系统要让它恢复执行,必须有什么“特殊事件”发生。操作系统记住该线程的请求,监视着“特殊事件”是否发生以及何时发生。当它发生时,线程才又能够加入到CPU时间等待队列中。一旦原创 2008-02-03 15:01:00 · 2848 阅读 · 0 评论 -
C++学习笔记(九)
转换(cast)的用途很广。在计算时可能需要进行基本数据类型的转换,在调用各种函数时,可能需要将自己的数据类型或对象转换为函数参数定义的数据类型或对象。 对于将“窄”类型变换为“宽”类型时,一般可以不用显式声明。这时就属于隐式转换。除了这种情况,其他都是显式转换。转换方式有如下几种: 1、在变量或常量前用括号括一个需要转换的目标类型关键字;另原创 2007-11-19 11:42:00 · 598 阅读 · 0 评论 -
C++学习笔记(六)
本来以为部门调整后可以不用考试了,所以这段时间就偷懒了。结果没想到还是要考,而且还变本加厉了,不但要考C++,还要考C语言。我哭! C语言的语法倒是没什么特别的,但是C++和C还是有些不一样的地方,不过好在差别应该不是特别大。我还得抽出时间来看看C了。不管怎么说,自己也不能考得太差,不然真不好在深圳这个地方混下去。虽然自己对在深圳的未来发展前景并不看好和自信,但怎么也得能过得去吧。原创 2007-11-12 20:46:00 · 493 阅读 · 0 评论 -
C++学习笔记(五)
今天来学习一下Overload——重载;它和Override——重写是有区别的。 通常,自然语言中同一个词可以代表多种不同的含义,具体含义要依赖上下文来确定。这就是所谓的一次多义——该词被重载(Overload)了。 在C++中,还有另外一个因素会使函数名重载:构造函数。因为构造函数的名字预先由类的名字确定,所以看上去只能有惟一一个构造函数名。但如果我们原创 2007-11-08 11:22:00 · 718 阅读 · 0 评论 -
C++学习笔记(一)
在学习C++的过程中,很多时候都要仔细理解面向对象的对态性和虚函数的含义。只有搞清楚这两个概念,才能更好的应用面向对象的特性来解决实际问题。当然,如果你没有完全理解的话,也可以解决很多问题,但是始终就像个瘸子走路,虽然能行走,但是行走的很别扭。正如我一样,我一直没有很好的理解这些OO概念,但是也从事程序开发有几年了,并且基本都是面向对象的开发。 新的工作单位要对我原创 2007-10-09 17:18:00 · 854 阅读 · 0 评论 -
const常用大全
const用法大全 面向对象是C++的重要特性,const直接可以取代c中的#defineconst的用法1. 限定符声明变量只能被读 2. 必须初转载 2007-10-10 19:26:00 · 644 阅读 · 0 评论 -
C++学习笔记(二)
在学习最新的C++标准过程中会碰到很多新问题,这些问题有时候很难理解为什么会发生。更奇怪的是,似乎跟开发工具有关。如下面这个在VS2005下的例子: WORD iStatus;ifstream ifs; if(IsExit(szPRLFile,0)!=0)...{ AfxMessageBox("file is not exit!"); return -原创 2007-10-10 09:34:00 · 1132 阅读 · 0 评论 -
在Dev-C++上搭建Winpcap的开发环境
上次在VC2005上搭了个Winpcap的开发环境,自己也做了不少测试。不过后来发现,自己要把TCP/IP协议要好好研究一下才能精益技艺,因为需要自己处理协议数据,这样才能获得自己想要的东西。虽然也可以借助别人的代码来提取自己想要的东西,不过自己学习一下总是好事情。不过自己还是太懒了,一直都找借口没有深入下去。 这不?又觉得用VC2005来测试,太浪费资源,转而研原创 2007-10-27 15:31:00 · 7231 阅读 · 6 评论 -
C++学习笔记(四)
指针是指向一些内存地址的变量,既可以是数据的地址也可以是函数的地址。所以,可以在运行时改变指针指向的内容。C++的成员指针(pointer-to-member)遵从同样的概念,除了所选择的内容是在类中之内的成员指针。这里麻烦的是所有的指针需要地址,但在类内部是没有地址的;选择一个类的成员意味着在类中偏移。只有把这个偏移和具体对象的开始地址结合,才能得到实际地址。成员指针的语法要求选转载 2007-10-25 17:06:00 · 668 阅读 · 0 评论 -
C++学习笔记(八)
今天下午又要考C++了。上周的C语言考得不是很好,这也在自己的预料中。这个C++估计也不能上80了。哎,不过还是把STL总结一下吧。 我的理解:容器——一种容纳数据的结构;迭代器——一种具有指针操作特征的类;通常定义为容器类的友元成员;算法——根据容器的特点,对迭代器按照一定的逻辑组成的满足一定运算功能的“函数”; Vector是STL中最接原创 2007-11-19 10:00:00 · 729 阅读 · 0 评论 -
多线程开发学习笔记之线程同步——互斥量
上次简单学习了一下临界区,感觉有些自我陶醉,呵呵。今天就能加点难度(相对来说)——互斥量。互斥量的用途和临界区很像。它与临界区的差别在于可以跨线程使用,可以用来同步进行多个线程间的数据访问,但是是以牺牲速度为代价的。前面说过了,只有临界区是非核心对象,那么互斥量就是一个核心对象了。核心对象的特点是有所谓的引用计数。所著一个未被拥有的互斥量,比锁住一个未被拥有的临界区需要花费几乎10原创 2008-02-05 10:17:00 · 961 阅读 · 0 评论 -
多线程开发学习笔记之线程同步——事件
事件,在我看来就是一种触发机制,即满足某一条件的触发。当线程需要等待某一事件的发生而不是一个资源的解锁,这在接收网络信息包或等待一个已完成某些任务的线程发出信号时非常有用。在Win32系统中,提供了事件对象。事件对象是同步对象中最简单的形式,也是最具有弹性的同步机制。其与互斥量和信号量的区别在于:互斥量和信号量是用于对数据的访问的,而事件是用来发信号表示某一操作已经完成了。事件对象原创 2008-02-18 10:06:00 · 1627 阅读 · 0 评论