Windows编程
文章平均质量分 83
guogangj
I have worked for several companies in these years. My major job was designing software on Win32 platform and Linux platform by C . Yes, only C , and I know nothing about .net, nothing about Java. Thats all!
展开
-
国际化困境(第一篇)
(和我前一篇文章一样,这篇文章也需要读者动手写些程序,参与其中,实验过程可能需要反复重启电脑,另外最好准备一套英文Windows系统,哦,如果再有一套Windows Vista英文版,那再好不过,总之就是实验环境越丰富越好) 当我写下这个标题的时候,我就觉得我可能错了,但我之前又一直很想写这么一个subject,如今看看,确实有些硬着头皮写的感觉。 这是一个相当大相当大的论题,我不原创 2009-03-20 20:00:00 · 2599 阅读 · 0 评论 -
VC6和VC2005的一点不同
已经是3月19日了,突然想到自己3月份还未曾发表一篇文章,于是想写点什么东西,技术含量高的文章一时也写不出,于是打算拿一些Skills或者Tips类的文章来凑凑数,这篇文章属于此列。 最近写了一个程序,给公司的仪器使用的,完成后我把代码放在svn中,Firmware组的Manager似乎对此代码比较感兴趣,就checkout了一份,几天后他告诉我在VC2005下编译有问题,我觉得奇怪,我写原创 2008-03-19 16:43:00 · 2946 阅读 · 5 评论 -
标题栏问号按钮帮助功能的实现
对下面这样的界面我们一定很熟悉,一个对话框,右上角有两个按钮,一个是小问号(我称之“问号按钮”),一个是叉(关闭按钮),点一下问号按钮,鼠标光标通常就变成了一个带问号的箭头,用这个光标点击一下对话框里的元素,就能弹出一个简要的帮助说明。这个功能我十分喜欢,因为它很直观,简单,不用查询繁琐的帮助文档去寻找答案。从事软件开发之后,我写过很多程序,很多都有用户界面的,却一般都没有实现这个原创 2008-02-20 10:40:00 · 5343 阅读 · 3 评论 -
我发现的第一个Microsoft的错别字
过完年了,其实放假9天说过去也快,晃一晃就没了。这次发表的文章很轻松,没什么技术含量,供大伙们娱乐用。记得小时候我看的书经常出现错别字,但确实有一本书一直没被我发现错别字,那就是《新华字典》,我问老师为什么《新华字典》没有错别字,老师说:“连《新华字典》都错了那还得了。”我于是就认为《新华字典》是绝对不会错的,但为什么不会错,我没怎么思考。到后来我才想起来:《新华字典》也是人撰写的,排版印刷过原创 2008-02-16 17:16:00 · 2005 阅读 · 4 评论 -
再论COM的线程模型
前些时间转载了一篇关于COM线程模型的文章,感觉效果还是很一般,我后来又搜集了些资料,打算自己写一篇非常通俗易懂,而又准确的文章,这就是本文。泛说"COM线程模型":http://blog.csdn.net/guogangj/archive/2007/09/06/1774280.aspx Apartment,中文翻译为“公寓”,有时候为“套间”,这里就翻译为“公寓”吧,都一个意思,指的就是COM的原创 2007-11-15 08:51:00 · 1385 阅读 · 0 评论 -
从CByteArray说起——浅论程序效率
有人说我对MFC一直很有偏见,其实不然,我只是觉得这是个适用性问题,因为很多时候我们根本不需要MFC,用了MFC,程序反而不好做。而MFC最为我诟病的是什么呢?除了多了个DLL的依赖之外就是效率的问题了。 前阵子接手过一些公司以前的程序,我总觉得运行太慢,我认为自己用VC++写的程序可以比它们快好几倍,那它们为什么这么慢呢?这个跟不恰当使用MFC肯定有关系。仔细看了代码,发现类似下面的代码原创 2008-01-28 11:31:00 · 8271 阅读 · 3 评论 -
Description of COM principle
Description of COM principle I was completely overwhelmed by COM technology. It is very difficult to understand. I think its mechanism can confuse all beginners. ATL is a good solution for COM, bu原创 2007-09-26 16:15:00 · 2074 阅读 · 3 评论 -
COM工作过程示意(一):进程内组件
这不算一篇纯粹的原创作品,这是我对《COM原理及应用》的一点整理。欢迎发表评论,当然还有后续。 Client COM库 Component(原创 2007-09-14 16:55:00 · 2176 阅读 · 5 评论 -
泛说"COM线程模型"
我对“公寓 ”一词说实在一直不太搞得清楚,而企图上论坛问人的话他们总是喜欢回答:“你还是好好把《COM本质论》看一遍吧。”其实如果其中有些关键部分不理解的话,就算看上十遍也是不行的,我们需要的是一本适合自己的教材,今天偶尔发现这篇文章,所以转上来,希望读者能发表下意见。为了方便阅读,我对原文稍微进行了一些排版。===== 原文 =====泛说"COM线程模型" 作者:未知 来源:月转载 2007-09-06 10:21:00 · 5651 阅读 · 1 评论 -
计算机专业英语中容易发错音的几个单词
Computer Science Technical Vocabulary想起我在上家工作时候的一件事情,那时有位同事跟我讨论一个程序为什么不能运行,我说:“可能它是.net程序,需要Framework方可。”这位老兄不明白:“什么?”我连说了几次,他还是不明白,我感到奇怪,他怎么连Framework都没听说过?于是我拿笔在纸上写了:“FRAMEWORK。”他恍然大悟,对我说:“这念[’f原创 2007-05-31 08:02:00 · 2888 阅读 · 1 评论 -
小小软件人这几年所遭遇的难题
一眨眼从事软件R&D四年有余了,对一个软件开发者来说,工作了三到四年往往就到达了他的顶峰,当然这句话不是我说的,这是我有一次到一家公司面试,那里的HR这样说的,而我不怎么同意,按照道家学说的观点,物极必反,但何为极?这是相对的,如果我在R&D领域工作了四年下来,感觉自己在这方面已经不能再发展了,于是去做别的,那这就是我的“极”了,但如果我觉得这仅仅是个开始,我还得继续学习才能取得更好的发展,那这还原创 2007-12-25 10:24:00 · 2515 阅读 · 2 评论 -
C++类对应的内存结构
提示1:对“内存结构”表示有疑问或不解的,先参考:http://blog.csdn.net/guogangj/archive/2007/05/25/1625199.aspx,本文使用的表示方法和VC6的Memory视图一致,即:左上表示低位。 提示2:下文提到的“类大小”严格上来说是该类经过实例化的对象的大小。当然了,光研究长度的话,两者差别不大,因为:CClassA objA,s原创 2008-01-11 10:04:00 · 12924 阅读 · 10 评论 -
An UI puzzle - Create a dialog in a thread.
Recently, I am in charge of a project. It has a function similar to the other programs, that is saving data to a file and load data from a file. But the saving and loading process may take quite a few原创 2009-03-09 10:54:00 · 1685 阅读 · 4 评论 -
窗口分析
(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在原创 2008-12-06 17:04:00 · 13063 阅读 · 33 评论 -
C++编程可能会忽视的一个“小问题”
又好久没写blog了,最近一直忙工作的事情,倒不是说没时间,而是没什么心思整理思路,这篇文章也不是什么大不了的文章,但确实是我最近遇到的一个问题,我在调试一个程序的时候时不时出现一些莫名其妙的问题,这些问题也就是那种无规律重现的非常棘手的bug,相信做过开发的人都深有体会。当然我最后是fix了这些bug,对我这种高手而言,没什么修不了的错误,(哈哈)要的只是时间而已,但从中发现了一个C++编程原创 2008-11-18 22:38:00 · 1539 阅读 · 1 评论 -
任务失败:构建精简界面类库
提起用VC++开发Windows程序,就一定少不了提起MFC,MFC已经足够应付大多的情况了,但坦白说我不喜欢MFC,因为其臃肿和不够高效,所以很多时候我都是直接用Win32 API来编写我的应用程序,显而易见,这个是很有难度的,主要的难度也许你已经知道了,就是界面的编写。 现在我们来回顾一下,如何用MFC写界面,要创建一个button,大致可以这样:CButton btn;b原创 2008-05-29 15:39:00 · 1731 阅读 · 4 评论 -
将FILE*传入DLL……
最近还是没有什么好的题目,这篇文章也是炒炒冷饭。这是大约两年前的事情了,当时我在做一个文件分析系统,要对很多文件类型进行判定,文件类型的判定千差万别,为了保证其灵活性,我打算使用DLL,增加一种新的文件,如果不能简单地根据字节位判断,那就新增一种DLL。那么是由exe打开文件呢?还是由DLL打开文件呢?我想了一下,从效率和防止代码冗余上考虑,还是由exe打开文件比较好,接下去就简单了,给每原创 2008-07-29 17:21:00 · 1370 阅读 · 1 评论 -
发布Gornix Synchronizer
断断续续写了两三个月(貌似吧),终于写得有个样子了,经过了一阵子的测试,打算发布这个“最初版本”,并check in svn。所以此文读者正好赶上了我的“新闻发布会”。 程序主界面:背景 很早很早以前,我的电脑中了一次攻击,所有分区丢失,那个叫惨啊,什么数据都没了,幸亏IT我还懂一点,后来我使尽了九牛二虎之力把除了C盘外的分区全部挽救了回来,C盘的部分数据也得以原创 2008-04-23 20:55:00 · 1336 阅读 · 4 评论 -
“这是用什么写的?”
近日得一小工具——PEid,可以用来查看PE文件的一些信息,其中有个信息我们开发者比较关心,就是这个PE文件是用什么工具生成的。大家如果感兴趣,就到网上去down一个PEid,然后看看自己的常用软件都是用些什么工具写的。下面我就列一列我的情况: UltraEdit V10.x原创 2008-04-18 10:04:00 · 4303 阅读 · 2 评论 -
dll占的究竟是谁的空间?——浅谈Windows内存机制
近来工作比较空闲,所以就上csdn.net看看帖子什么的,两个多月前,我在VC/MFC板块中发了这么一个帖子:dll占的究竟是谁的空间?详细参考: http://topic.csdn.net/u/20080123/16/310330cd-e262-4534-b8c8-9bff892c7f21.html 关于这个帖子,我后面作了个总结,意思是说:dll占用的空间不属于某一个调用它的进原创 2008-04-08 17:00:00 · 11574 阅读 · 5 评论 -
发布一些面试题目
1、What is achieved by prefixing the static keyword to a file-level function or file-level variable declaration?使用static关键字修饰文件级的函数和变量起到什么作用? key:对变量来说,不允许文件外的程序访问;对函数来说,该函数的实现必须在这个文件内完成,并且不允原创 2008-01-13 13:11:00 · 2146 阅读 · 5 评论 -
内存表示,位运算及字节序
这篇文章始于对这么个程序的思考: int main(int argc, char* argv[]) { int i=1234567; DWORD dwWrite;原创 2007-05-25 11:22:00 · 6609 阅读 · 5 评论 -
浅谈VC++工程的文件组织
浅谈VC++工程的文件组织 惯例惯例,开场时候先说点别的事情。前阵子收到一封Email,是一个大学同学发来的,他在广东工作,3年没见过他了,他说他手机号码又换了,通知一下。我很反感老换手机号码的人,于是草草用短信回了3个字:“知道了。”第二天收到了他的短信,内容竟然是:“最近过得不如意吧。”我纳闷了,哪有这样的问候?于是回复:“你说你不如意还是我不如意?”他回复道:“我问你啊,过得不如意吧原创 2007-07-12 11:05:00 · 6502 阅读 · 2 评论 -
排错感悟
2006/10/30:这篇文章5个月前写的了,一直没机会发表(一直留在公司的电脑里),今天终于拷了回来,所以贴出来供大家参考,是我总结的一些经验。硬件本身错误:我还没有遇到过,但有个众所周知的例子,1994年Intel推出的Pentium处理器后来被发现存在浮点运算错误的bug,实在太严重了。除非实在没有了其它一切可能,否则不要轻易怀疑这个,尤其是使用主流硬件的情况下。硬件故障:一定是硬件原创 2006-10-30 19:48:00 · 1493 阅读 · 0 评论 -
软件开发中遇到的一些问题
软件开发中遇到的一些问题 对近日来一些问题进行思考,希望能有个解决方案。 1、数据库方面每个项目都离不开数据库,而数据库的建立过程是个问题,如何将我们的开发成果移动到运营环境中是个问题,如何维护以后的更新更加是个问题,所有的东西都看起来是那么简单而缺乏技术含量,但真的尝试把它做好却是非常不容易,人工手动来维护这些文档是可以的,但恐怕这是一个专门的工作,如果干这个的人还同时做别的原创 2006-04-27 17:01:00 · 11632 阅读 · 0 评论 -
非MFC dll快速入门
(之前是关于C++等的内容,略过) 第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数。 如图6,在VC++中new一个Win32 Dynamic-Link Library工程dllTest(单击此处下载本工程附件)。注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建转载 2006-04-07 13:37:00 · 2350 阅读 · 0 评论 -
C++中类型转换的解释
这几天有场笔试,其中碰到一道题目,让我列举C++中的四种cast的转换分别是什么,有何作用,并举例说明,我虽然早知道C++有四种cast转换,但平常使用非常少也就没注意,所以那题我是没做出来,回来后打算对C++的这些类型转换方法进行小结,我做了许多实验,于是有此文,希望对你有些帮助。 下文中的“常规类型”指的是int、double、float、bool……这些非结构化类型,也就是不包括st原创 2006-04-07 11:19:00 · 2527 阅读 · 1 评论 -
PL/SQL快速参考
PL/SQL笔记程序不区分大小写 1、SQL*Plus这个程序可以用来执行脚本,执行脚本前先设置假脱机文件,这样就可以方便地查看出错之处了。或者使用PL/SQL Developer的Command窗口来执行脚本。2、代码中变量的声明: set serveroutput on;原创 2006-04-07 14:43:00 · 2611 阅读 · 0 评论 -
WinSock原理
一、客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户转载 2006-04-07 14:34:00 · 4086 阅读 · 0 评论 -
最常用SQL快速参考(其中某些部分只适合Oracle)
关系型数据库模型由Codd博士在1970年提出SQL成为ANSI标准是在1986年 最基本查询 select * from table1 where name=’Lincoln’; select col1,col2 from table1;无重复查询 select distinct amount from checks; (distinct在原创 2006-04-07 13:22:00 · 1450 阅读 · 0 评论 -
关于“预编译”
一、预编译头文件说明 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。 预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectnam原创 2006-03-07 14:51:00 · 2357 阅读 · 2 评论 -
TCP/IP简介
一、TCP/IP 体系结构与特点 1、TCP/IP体系结构TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议IP:网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ARP原创 2006-03-07 14:35:00 · 1108 阅读 · 0 评论 -
COM入门第二部分 - 编写COM Server
COM入门第二部分 - 编写COM Server作者:Michael Dunn(codeproject.com)译者:蒋国纲 本文目的 同我写的上一篇《COM入门第一部分》一样,本文也是为初学COM的程序员准备的,帮助他们来弄懂一些COM基础。本文覆盖了COM Server部分,解释如何逐步编写COM接口和COM Server,也提及到当被COM运行库调用的时候COM Serv翻译 2006-10-30 21:32:00 · 7674 阅读 · 8 评论 -
COM入门第一部分 - 什么是COM和如何使用COM
(本文于2007年11月5日进行过编辑,修正若干用词不当的问题)COM入门第一部分 - 什么是COM和如何使用COM作者:Michael Dunn译者:蒋国纲 本文目的 此文为刚开始学习COM并需要一些帮助来认识其基础的程序员而写,文章简要地覆盖了COM的规范,解释一些COM的术语和怎样重复使用存在的COM组件,但本文并不覆盖创建一个COM的内容。(译者:关于如何创翻译 2006-10-30 20:39:00 · 10256 阅读 · 3 评论 -
C++的const_cast的问题
和上一篇文章一样了,还是提起一下大约一年前我来公司面试所遇到的一道题目,题目很简单:C++有多少种cast,它们的名称和功能各是什么。(我之前的文章曾经提到过,但后来我发现自己写得并不够简明)答案如下: 一共四种cast。1、static_cast,支持子类指针到父类指针的转换,并根据实际情况调整指针的值,反过来也支持,但会给出编译警告,它作用最类似C风格的“强制转换”,一般来说可认为它是原创 2007-03-29 11:59:00 · 8017 阅读 · 8 评论 -
一道智力题
我害怕自己被黑暗吞噬,企图写一些似乎无关紧要的东西,分开注意力……其实我最近发现自己有个特点,就是时不时会回想过去遇到过的一些问题,得出一些新的结论或者寻求一些新的解法,我的问题也不一定是什么难题,有时无非是些能稍微动动脑筋的东西罢了。但不管怎样,我自己还是挺喜欢自己这个特点的,尤其在这个迷惘的季节。 这是我差不多一年前碰到的笔试题目,就是我今天离开的这个公司的笔试题目,如果做过这种题目,原创 2007-03-29 10:14:00 · 1462 阅读 · 0 评论 -
我看《最后期限》
《最后期限》(The Dead Line)是我看的第一本关于项目管理的书,更重要的是这本书属于科普读物,通俗易懂,书并不厚,不过我看了好几天,因为我边看边思考,结合我的经历,我想这样才能真正对我起到指导作用。下面我抓住我体会最深刻的一些要点,写出来供大家参考。 一、管理的核心是人,不涉及到人的管理,最多只能称得上是文档工作,文档本身不会产生价值,价值只能通过人来创造,人是最重要的。原创 2007-06-20 21:23:00 · 1305 阅读 · 1 评论 -
公式翻译
又是一个寒冷的夜晚,我坐在床头,这个时候我只有两件事情能做,一是看《圣经》,一是看《数据结构》,但明显前者对我来说比后者难得多,一来我不是信徒,二来内容是在枯燥,缺乏创造性,但更关键的是:其实我没有《圣经》……所以翻起了那本准天书——《Data Structures and Algorithms with Object-Oriented Design Patterns in C++》,开始神游…原创 2006-12-20 00:19:00 · 3366 阅读 · 3 评论 -
wow盗号木马事件前后
坦白说,这是我第一次被盗号,我是说包括所有的网络帐号,下面简单叙述经过。8月25日晚,公会在组织MC,我当然也参加了,即将打到7号boss的时候我突然掉线,我感到奇怪,自从我调整过网络设备后,无缘无故掉线的事情就没有发生过,难道这是一次意外?当我再次登录的时候,提示密码错误了,我再次输入密码,结果也如此,不用说,被盗了,为了确认,我用手机联系了在线的朋友,他们说我的号还在线,这就更加肯定了这一原创 2006-08-28 21:30:00 · 7836 阅读 · 10 评论 -
从C++角度看Java
最近感觉Java技术如日中天,招聘职位非常之多,而C++却相对黯然,身为C++的“铁杆玩家”的我也不得不心动去了解下Java,于是有了这篇文章,我暂时没打算深入学习Java,我仅仅是花了不到一天的时间阅读了一下Java的教程《Java2核心技术:卷I》,然后编译了几个小小例程,所以下面所描述的肯定有不妥之处,而我也只是站在我的角度去思考的,希望在行者通过留言来给出适当见解,谢谢! 1、原创 2006-12-18 20:25:00 · 1850 阅读 · 4 评论