博文

Windows下DLL编程技术及应用(2007-05-22 12:35:00)

摘要: Windows下DLL编程技术及应用 摘 要: 本文介绍了DLL技术在Windows编程中的基本运用方法及应用,给出了直接内存
访问及端口I/O的两个实用DLL的全部源代码。
关键词: DLL Windows编程 内存访问 I/O 一 、引 言
由于Windows为微机提供了前所未有的标准用户界面、图形处理能力和简单灵便的操作,绝大多数程序编制人员都已转向或正在转向Windows编程。在许多用户设计的实际应用系统的编程任务中,常常要实现软件对硬件资源和内存资源的访问,例如端口I/O、DMA、中断、直接内存访问等等 。若是编制DOS程序,这是轻而易举的事情,但要是编制Windows程序,尤其是WindowsNT环境下的程序,就会显得较困难。
因为Windows具有"与设备无关"的特性,不提倡与机器底层的东西打交道,如果直接用Windows的 API函数或I/O读写指令进行访问和操作,程序运行时往往就会产生保护模式错误甚至死机,更严重的情况会导致系统崩溃。那么在Windows下怎样方便地解决上述问题呢?用DLL(Dynamic Link Libraries)技术就是良好途径之一。
DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的,因此掌握它、应用它是非常重要的。其实Windows本身就是由许多的DLL组成的,它最基本的三大组成模块Kernel、GDI和User 都是DLL,它所有的库模块也都设计成DLL。凡是以.DLL、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都是DLL,要是打开Windows\System目录,就可以看到许多的DLL模块。尽管DLL在Ring3优先级下运行,仍是实现硬件接口的简便途径。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式,减少了编程设计上的不便;同时,一个DLL在内存中只有一个实例,使之能高效经济地使用内存;DLL实现的代码封装性,使得程序简洁明晰;此外还有一个最大的特点,即DLL的编制与具体的编程语言及编译器无关,只要遵守DLL的开发规范和编程策略,并安排正确的调用接口,不管用何种编程语言编制的DLL都具有通用性。例如在BC31中编制的DLL程序,可用于BC、VC、VB、Delp......

阅读全文(1991) | 评论:0

C++名人的网站(2007-05-19 13:12:00)

摘要:正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴,下面的人物我们认为没有介绍的必要,只因下面的人物在C++领域的地位众所周知,我们只将相关的资源进行罗列以供读者学习,他们有的工作于贝尔实验室,有的工作于知名编译器厂商,有的在不断推进语言的标准化,有的为读者撰写了多部千古奇作…… 1、Bjarne Stroustrup http://www.research.att.com/~bs/ 2、Stanley B. Lippman http://blogs.msdn.com/slippman/ (中文版) http://www.zengyihome.net/slippman/index.htm 3、Scott Meyers http://www.aristeia.com/ 4、David Musser http://www.cs.rpi.edu/~musser/ 5、Bruce Eckel http://www.bruceeckel.com http://blog.csdn.net/beckel Bruce Eckel 博客中文版 6、Nicolai M. Josuttis http://www.josuttis.com/ 7、Herb Sutter http://www.gotw.ca/ http://blog.csdn.net/hsutter/ Herb Sutter 中文博客 8、Andrei Alexandrescu http://www.moderncppdesign.com......

阅读全文(2705) | 评论:0

七种武器——.NET工程师求职面试必杀技(2007-05-19 13:03:00)

摘要:七种武器——.NET工程师求职面试必杀技 IT人 一、.NET框架(七种武器之孔雀翎)
二、面向对象软件开发(七种武器之霸王枪)
三、C# (七种武器之离别钩)
四、ASP.NET(七种武器之碧玉刀)
五、数据库(七种武器之长生剑)
六、AJAX技术(JAVASCRIPT和XML)(七种武器之多情环)
七、软件体系架构(七种武器之拳头) 一、.NET框架(七种武器之孔雀翎)

开发人员应该熟悉.NET FrameWork体系结构和基本原理,熟悉CLR(公共语言运行时)和MSIL(中间语言),熟悉.NET框架中的委托、线程、序列化、集合、垃圾回收机制、反射等内容。

(世界上绝没有一种暗器能比孔雀翎更厉害,也绝没有一种武器能比孔雀翎更美丽……孔雀翎娇小的身躯中隐藏着巨大的威力…….NET框架的博大精深,正如同孔雀翎一样美丽而深不可测。)

二、面向对象软件开发(七种武器之霸王枪)

开发人员应该熟悉面向对象软件开发(OOP)基本概念,熟悉面向对象软件开发中的类、继承、封装、多态等概念,具备良好的面向对象软件开发思想和设计原则。

(霸王,力拔山兮气盖世。枪,百兵之祖是为枪……霸王枪是世上最霸道的兵器之一……正如面向对象软件开发,它大小通吃,不论是采用何种软件开发框架,还是使用不同的开发语言,面向对象软件开发在其中畅通无阻,霸气十足。)

三、C# (七种武器之离别钩)

开发人员应该熟练掌握C#这门面向对象编程语言,虽然.NET框架支持多种编程语言,但C#无疑是最简洁、使用者最广泛和功能最强大的一种。

(离别钩是一件武器,无论钩住人的任何部位,都能造成离别……但使用它的初衷却是为了能够与所爱的人相聚……C#是一门年轻的语言,它的出现,让更多的开发者爱上了C#,脱离了VB和ASP的阵营,造成离别。)

四、ASP.NET(七种武器之碧玉刀)

开发人员应该理解ASP.NET的页面生命周期、熟悉配置文件的格式、熟悉ASP.NET的各种服务器控件和数据控件、了解ASP.NET中的各种对象,了解ASP.NET2.0新特性。

(刀是最容易上手的武器,也是使用最......

阅读全文(7897) | 评论:0

C++的学习感想(2007-05-19 12:53:00)

摘要:C++的学习感想 作者:robindy 来源:小狼博客  IT人   很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后还是得回过头来学习C++语言本身。
   学一个月,可以用VC写一些小程序自己玩玩
  学两个月,可以用VC写像样点的东西在周围人面前炫炫
  学三个月,可以用VC给老板开始干活了
  学六个月,开始重头去学C++
  学一年后,决定要不要继续,if(继续) 学习MFC、ATL、STL、C#、BCB、Network、Databa
se、Algorithm... else 开始就是个错误
  学三年后,学会怎么来用编程语言来解决问题,VC、BCB等都只是解决问题的工具。这时候你如果还在学C++,你可以从事软件开发这个很有“前途”的职业了。
 很多人把学习C++语言当成学习VC了,我曾经就走过这样的弯路。当学了很长时间的VC后
还是得回过头来学习C++语言本身。 那么学习C++从何处入手了?
C++语言相对于C语言来说引入了两个大的新东西,一个就是面向对象(具体来将就是类
),另外就是模板技术(模板编程或者叫泛型编程是进来非常流行的技术,在C#中虽然还
没有对泛型编程的支持,但是相信在将来也一定会加入这一功能),模板是C++中比较复
杂的部分,但是作为一个真正的C++程序员,这部分很重要。尤其是对C++标准程序库
的掌握尤为重要。
刚开始的时候千万不要直扑VC中的各种向导和设计器。因为依赖开发环境生成的很多代码
会把我们搞糊涂,也不利于我们学习C++语言本身。我的建议就是生成一个空的控制台工
程,然后自己向里面添加文件。
如下就是一个简单的控制台程序:
//robindy/list.cpp #include <iostream>
#include <list> using namespace std; int main()
{
list<char> coll; for(char c = 'a'; c <= 'z'; ++c)
{
coll.push_back(c);
} list::cons......

阅读全文(3874) | 评论:4

骇人听闻的 CSP [转](2007-05-11 21:27:00)

摘要:  骇人听闻的 CSP [转]

                           来源:雨下桐梧     今天有点空,研究了一下CSP,有一点不大不小的收获,现在拿出来献一下丑。用个有点搞噱头的标题是因为在网上原来有就这么一篇文章,借个标题聚点人气,呵呵。而我即将要介绍的东西,的确是比较有创意的,并且文章有一段话是引用里面的,所以用一下这个标题也不足为过吧,言归正传,下面开始。     Hmm...What is CSP?     咳.....关于CSP的概念和背景,我实在懒得写了,请允许我摘录一段: ---------------------------------------------------------------------------     这个CSP不是CSP(Commercial Service Provider)即商业服务提供商,CSP不是Client/Server Program,也不是Chinese Super Programer,更不是CS Player,那么什么是CSP呢?在说明什么是CSP之前,先说明什么是“骇人听闻”,一说到“骇人听闻”,你可能就想到了是什么坏事吧,其实不一定,应该说就是前所未闻的事说严重一点就是“骇人听闻”了。在每一本关于asp, php, jsp, asp.net书上都告诉你,做网站不可能使用C++,真的吗?这个CSP偏偏就是C++ Server Pages的简称,和asp、jsp类似,属于一种Web应用扩充的脚本语言,可以用来编写网页代码。其对应的文件名是".CSP"。 (下面的文字部分来源于《CSP开发者手册》)     CSP使用C++语言作为脚本的语言,和asp、jsp、php等不同的是,CSP不是解释执行的脚本,而是真正编译后执行的......

阅读全文(3326) | 评论:2

C/C++术语中英对照 [转](2007-05-11 21:24:00)

摘要: 以下是侯捷个人收集到的 C/C++ 编程方面的术语对照。请大陆朋友给我一些意见,尤其是标示 '?' 之栏位。谢谢。
两岸朋友,如果您想到哪些术语尚未列入本表,请提示我,谢谢。
新书写作时,我会以此表为叁考。

●英中繁简编程术语对照

英文                    台湾惯用术语                            大陆惯用术语
---------------------------------------------------------------------------------------
abstract                抽象的                                  抽象的
abstraction             抽象体、抽象物、抽象性       &......

阅读全文(4917) | 评论:0

2007 年年初关于 C++ 的会谈[转](2007-05-11 21:16:00)

摘要:  2 月 21 号:Google(于加州 Mountainview 地区):“C++0x 中的初始化”。 3 月  6 号:德克萨斯州农机大学计算机科学系工业分支计划:待定。 3 月  8 号:工程师 2007(通过学院站的网页):“将 C++ 当作母语”(有少量关于 C++0x 的评述)。 3 月 15 号:英特尔伯克利实验室:“C++0x 纲要”。 3月19-20号:SD07 会议:Stroustrup & Sutter 谈论 C++:“Concepts”、“如何定义优秀的接口”、
           “C++0x 概览”、“C++ 在对安全性要求极高的系统上的应用”。 4 月 20 号:ACCU 2007(于牛津):“C++0x 中的初始化”、“C++0x 纲要”。 4 月 23 号:剑桥大学社会科学系:待定。 6 月 11 号:HOPL-III:“基于现实发展语言,并为其服务:C++:1991-2006”。 本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss ......

阅读全文(2470) | 评论:0

C++0x热点问题访谈 [转](2007-05-11 21:15:00)

摘要:  C++0x热点问题访谈  2004年底前后,经过较长一段时间的沉默,一批世界级的C++著作相继面世。2005年4月,在挪威Lillehammer举行的C++标准委员会会议上,Bjarne Stroustrup促成委员会达成一致意见:让C++0x中的x等于9。2005年11月,Bjarne Stroustrup、Herb Sutter、Stanley B. Lippman、Andrei Alexandrescu等前辈、新锐将在Las Vegas庆祝C++ 廿周年。2005年底,C++中国社群将在上海举办首届“现代C++设计和编程”技术大会……C++好戏连台,令人振奋。笔者近日就C++0x以及其他一些热点问题请教了Bjarne先生。大师观点,不敢专美,整理成文,以飨同好。  C++0x  荣耀:Library TR1(library Technical Reports,库技术报告)和TR2的动机是什么?TR1和TR2、TR1/TR2和C++0x、Performance TR(Performance Technical Reports,性能技术报告)和C++0x、Boost和C++0x之间的关系如何?  Bjarne:Library TR是对标准库改进工作的具体结果的体现。当一套设施、特性就绪后,TR1即被表决通过,然后人们继续向TR2前进。TR1和TR2之间的区别仅在于“时间不同,所做的事情不同”而已。大部分TR1和TR2中的内容有望成为C++0x的一部分。  Performance TR是一个关于C++适合于性能严苛和资源受限的编程的报告,大多和嵌入式系统编程有关。其作用主要在于教育程序员并努力驱散萦绕C++的能与不能的流言蜚语。特别要指出的是,该TR证明C++是一门极好的适合于嵌入式系统编程的语言。  启动Boost项目的人们(著名的如Beeman Dawes)过去是、现在仍然是C++标准委员会的成员。Boost的目标是提供对标准库的扩展,并使得大多数有用且成功的Boost库成为新一代C++标准。其中一部分(而非全部)将会成为C++0x的一部分。注意,当一个库被添加进标准时,往往需要对其进行某种程度的修改。许多TR1扩展一开始都是作为Boost的一个组成部分而开始它们的生命旅程的......

阅读全文(2832) | 评论:0

C++0x 概览 [转](2007-05-11 21:12:00)

摘要:  C++0x概览 — 2005上海“Modern C++ Design & Programming”技术大会致辞 Bjarne Stroustrup C++0x的工作已经进入了一个决定性的阶段。ISO C++委员会对C++0x的目标是使其成为“C++09”。这意味着我们要在2008年完成这个标准以便被ISO成员国批准。最后提交的标准设施将选自目前正被讨论的提案。为了按时完成此项工作,委员会已经停止审查新的提案并将精力集中于已经被讨论的那些提案上。  本文简要描述了C++0x标准化工作的指导原则,展示了一些可能的语言扩展例子,并列出了一些被提议的新标准库设施。  说明:本文首发于2005年11月18-20日在上海举行的“Modern C++ Design & Programming”技术大会。  指导原则  C++是一门偏向于系统编程的通用编程语言。它  是一个更好的C 支持数据抽象 支持面向对象编程 支持泛型编程 当我说“系统编程”时,我是指传统上与操作系统以及基础工具有关的那一类编程任务。包括操作系统核心、设备驱动程序、系统工具、网络应用、字处理工具、编译器、某些图形和GUI应用、数据库系统、游戏引擎、CAD/CAM、电信系统,等等。这类工作在当前的C++用户中占有主导地位。例子参见我的个人主页“Applications”单元(http://www.research.att.com/~bs/applications.html)。   C++0x的目标是使以上的说法仍然成立。它并不是要消除这些编程风格(styles)(或“paradigms”,范型)之一(比方说,使C++不那么兼容于C),或者添加一种全新的“范型”。最有效的编程风格是联合使用这些技术,这也就是我们常说的“多范型编程(multi-paradigm programming)”。因此,可以说我们希望改进C++使其成为一门更好的多范型编程语言。  C++0x的高级目标是  使C++成为一门更好的系统编程语言和构建库的语言。        - 而不是为特定子社群提供专用设施......

阅读全文(3449) | 评论:0

STL之父访谈录 (2007-05-11 21:10:00)

摘要:  翻译者: myan
出处: http://www.sgi.com/technology/stl

1995年3月,dr.dobb's journal特约记者, 著名技术书籍作家al stevens采访了stl创始人alexander stepanov. 这份访谈纪录是迄今为止对于stl发展历史的最完备介绍, 侯捷先生在他的stl有关文章里推荐大家阅读这篇文章. 因此我将该文全文翻译如下:

q: 您对于generic programming进行了长时间的研究, 请就此谈谈.
a: 我开始考虑有关gp的问题是在70年代末期, 当时我注意到有些算法并不依赖于数据结构的特定实现,而只是依赖于该结构的几个基本的语义属性. 于是我开始研究大量不同的算法,结果发现大部分算法可以用这种方法从特定实现中抽象出来, 而且效率无损. 对我来说,效率是至关重要的, 要是一种算法抽象在实例化会导致性能的下降, 那可不够棒.
  
   当时我认为这项研究的正确方向是创造一种编程语言. 我和我的两个朋友一起开始干起来.一个是现在的纽约州立大学教授deepak kapur, 另一个是伦塞里尔技术学院教授david musser.当时我们三个在通用电器公司研究中心工作. 我们开始设计一种叫tecton的语言. 该语言有一种我们称为"通用结构"的东西, 其实不过是一些形式类型和属性的集合体, 人们可以用它来描述算法. 例如一些数学方面的结构充许人们在其上定义一个代数操作, 精化之,扩充之, 做各种各样的事.

   虽然有很多有趣的创意, 最终该项研究没有取得任何实用成果, 因为tecton语言是函数型语言. 我们信奉backus的理念,相信自己能把编程从von neumann风格中解放出来. 我们不想使用副效应, 这一点限制了我们的能力, 因为存在大量需要使用诸如"状态", "副效应"等观念的算法.  

   我在70年代末期在tecton上面所认识到了一个有趣的问题: 被广泛接受的adt观念有着根本性的缺陷. 人们通常认为adt的特点是只暴露对象行为特征, 而将实现隐藏起来. 一项操作的复杂度被认为是与......

阅读全文(8964) | 评论:1