作业帮 > 体裁作文 > 教育资讯

编程入门

来源:学生作业帮助网 编辑:作业帮 时间:2024/09/28 09:30:32 体裁作文
编程入门体裁作文

篇一:电脑编程入门教程

电脑编程入门教程

先认认真真的学习一门语言,学习微软的就先从VB开始,VB是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。书籍最少应该准备两本,不可能一本书籍会包含VB的所有内容,在看书的时候,可以交叉的看,一本书籍中没有讲到的内容可以在另一本中看到,这样对学习是很有好处的,也能保证所学知识的完整性。学编程是一个很漫长的过程,不要着急,要理论与实践想结合,例程书籍也是很重要的,看源代码对学习也是很有帮助的,等你学完这门VB语言之后,学习别的语言是非常简单,可以尝试C语言,按照C——C++——VC的顺序学习,有助于知识的连贯性,我也希望你能学好的。

或者学习Delphi,入门较为简单类似于VB,但比VB强大,即可作为入门又能做强、做大

1.明确学习目的

学习编程对大多数IT业人员来说都是非常有用的。学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。

2.打好基础

学编程要具备一定的基础,总结之有以下几方面:

(1)数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。

(2)逻辑思维能力的培养学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。

(3)选择一种合适的入门语言 面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类: 1)本地开发应用软件开发的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;数据库开发工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。 2)跨平台开发开发工具如 Java 等。

3)网络开发对客户端开发工具如:Java Script 等;对服务器开发工具如:PHP 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。以上不同的环境下几种开发工具中 VB 法简单并容易理解,界面设计是可设化的,易学、易用。选 VB 作为入门的方向对出学者是较为适合的。

3. 注意理解一些重要概念

一本程序设计的书看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行编程应用,需要深入理解这些概念,在理解的基础上应用,不要只简单地学习语法、结构,而要吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。

4.掌握编程思想

学习一门语言或开发工具,语法结构、功能调用是次要的,最主要是学习它的思想。例如学习 VC 就要学习 Windows 的内在机理、什么是线程......;学习 COM 就要知道 VTALBE 、类厂、接口、idl......,关键是学一种思想,有了思想,那么我们就可以触类旁通。

5.多实践、多交流

掌握编程思想必须在编程实际工作中去实践和体会。编程起步阶段要经常自己动手设计程序,具体设计时不要拘泥于固定的思维方式,遇到问题要多想几种解决的方案。这就要多交流,各人的思维方式不同、角度各异,各有高招,通过交流可不断吸收别人的长处,丰富编程实践,帮助自己提高水平。亲自动手进行程序设计是创造性思维应用的体现,也是培养逻辑思维的好方法。

6.养成良好的编程习惯

编程入门不难,但入门后不断学习是十分重要的,相对来说较为漫长。在此期间要注意养成一些良好的编程习惯。编程风格的好坏很大程度影响程序质量。良好的编程风格可以使程序结构清晰合理,且使程序代码便于维护。如代码的缩进编排、变量命令规则的一致性、代码的注释等。

7.上网学编程

在网上可以学到很多不同的编程思想、方法、经验和技巧,有大量的工具和作品及相关的辅导材料供下载。

8.加强计算机理论知识的再学习

学编程是符合“理论→实践→再理论→再实践”的一个认识过程。一开始要具有一定的计算机理论基础知识,包括编程所需的数学基础知识,具备了入门的条件,就可以开始编程的实践,从实践中可以发现问题需要加强计算机理论知识的再学习。程序人人皆可编,但当你发现编到一定程度很难再提高的时候,就要回头来

学习一些计算机科学和数学基础理论。学过之后,很多以前遇到的问题都会迎刃而解,使人有豁然开朗之感。因此在学习编程的过程中要不断地针对应用中的困惑和问题深入学习数据结构、算法、计算机原理、编译原理、操作系统原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。这样经过不断的学习,再努力地实践,编程水平一定会不断提高到一个新高度。

总结

1、先照书上的题目写,题目的设计是有道理的巩固基础知识。

2、找数学题,写个小程序解决,熟悉算法和基础函数。

3、自己出题目,小一点的,如自编资源管理器、自编写字板之类,练习WINDOWS下的编程。

4、结合身边的事,找个中等课题,或看别人的程序,自已想办法实现。

5.把教材中的例子,自己仿照着写一遍,上机运行,看结果.要知道,任何产品都是有例子的,有机结合或仿照。

6.从自己熟悉的事情入手,如成绩统计,编制一段程序,完成一个功能.然后再完善。

7.要反复破坏代码,从破坏中寻找代码的规律。

8.必须经常反复上机练习。

篇二:EXCEL编程入门教程

EXCEL编程初学者教程

新术语:“宏”,指一系列EXCEL能够执行的VBA语句。

以下将要录制的宏非常简单,只是改变单元格颜色。请完成如下步骤:

1)打开新工作簿,确认其他工作簿已经关闭。

2)选择A1单元格。调出“常用”工具栏。

3)选择“工具”—“宏”—“录制新宏”。

4)输入“改变颜色”作为宏名替换默认宏名,单击确定,注意,此时状态栏中显示“录制”,特别是“停止录制”工具栏也显示出来。替换默认宏名主要是便于分别这些宏。 ★ 宏名最多可为255个字符,并且必须以字母开始。其中可用的字符包括:字母、数字和下划线。宏名中不允许出现空格。通常用下划线代表空格。

5)选择“格式”的“单元格”,选择“图案”选项中的红色,单击“确定”。

6)单击“停止录制”工具栏按钮,结束宏录制过程。

※ 如果“停止录制”工具栏开始并未出现,请选择“工具”—“宏”—“停止录制”。

录制完一个宏后就可以执行它了。

1.4 执行宏

当执行一个宏时,EXCEL按照宏语句执行的情况就像VBA代码在对EXCEL进行“遥控”。但VBA的“遥控”不仅能使操作变得简便,还能使你获得一些使用EXCEL标准命令所无法实现的功能。而且,一旦熟悉了EXCEL的“遥控”,你都会奇怪自己在没有这些“遥控”的情况下,到底是怎么熬过来的。要执行刚才录制的宏,可以按以下步骤进行:

1)选择任何一个单元格,比如A3。

2)选择“工具”—“宏”—“宏”,显示“宏”对话框。

3)选择“改变颜色”,选择“执行”,则A3单元格的颜色变为红色。试着选择其它单元格和几个单元格组成的区域,然后再执行宏,以便加深印象。

1.5 查看录制的代码

到底是什么在控制EXCEL的运行呢?你可能有些疑惑.好,让我们看看VBA的语句吧.

1)选择“工具”—“宏”—“宏”,显示“宏”对话框。

2)单击列表中的“改变颜色”,选择“编辑”按钮。

此时,会打开VBA的编辑器窗口(VBE)。关于该编辑器,以后再详细说明,先将注意力集中到显示的代码上。代码如下:(日期和姓名会有不同)

Sub 改变颜色()

'

' 改变颜色 Macro

' xw 记录的宏 2000-6-10

'

'

With Selection.Interior

.ColorIndex = 3

.Pattern = xlSolid

.PatternColorIndex = xlAutomatic

End With

End Sub

将来会十分熟悉这种代码,虽然现在它们看上去像一种奇怪的外语。学习VBA或编程语言在某种程度上比较像在学习一种外语。

Sub 改变颜色():这是宏的名称。

中间的以“ '”开头的五行称为“注释”,它在录制宏时自动产生。

以With 开头到End With 结束的结构是With结构语句,这段语句是宏的主要部分。注意单词“selection”,它代表“突出显示的区域”(即:选定区域)。With Selection.Interior :它读作“选择区域的的内部”.这整段语句设置该区域内部的一些“属性”。

其中:

.ColorIndex = 3: 将该内部设为红色。注意:有一小圆点,它的作用在于简化语句,小圆点代替出现在With后的词,它是With结构的一部分。另外:红色被数字化为3.(红色警戒是否可称作:3号警戒,嗯?)有兴趣的话,你将3改为其他数字试试看。

.Pattern = xlSolid:设置该区域的内部图案。由于是录制宏,所以,虽然你并未设置这一项,宏仍然将其记录下来(因为在“图案”选项中有此一项,只是你为曾设置而已)。xlSolid表示纯色。

.PatternColorIndex = xlAutomatic:表示内部图案底纹颜色为自动配色。

End With:结束With 语句。

End Sub:整个宏的结束语

1.6 编辑录制的代码

在上一节,我们录制了一个宏并查看了代码,代码中有两句实际上并不起作用。哪两句?现在,在宏中作一个修改,删除多余行,直到和下面代码相同:

Sub 改变颜色()

'

' 改变颜色 Macro

' xw 记录的宏 2000-6-10

'

'

With Selection.Interior

.ColorIndex = 3

End With

End Sub

完成后,在工作表中试验一下。你会发现结果和修改前的状况一样。在With 语句前加入一行:

Range("A5").Select

试着运行该宏,则无论开始选择哪个单元格,宏运行结果都是使A5单元格变红.

现在可以看到,编辑录制的宏同样非常简单。需要编辑宏是因为以下三个方面的原因。一:在录制中出错而不得不修改。二:录制的宏中有多余的语句需要删除,提高宏的运行速度。三:希望增加宏的功能。比如:加入判断或循环等无法录制的语句。

1.7 录制宏的局限性

希望自动化的许多EXCEL过程大多都可以用录制宏来完成.但是宏记录器存在以下局限性.通过宏记录器无法完成的工作有:

1)录制的宏无判断或循环能力.

2)人机交互能力差,即用户无法进行输入,计算机无法给出提示.

3)无法显示EXCEL对话框.

4)无法显示自定义窗体.

1.8 小结

本课中,你已经掌握了VBA的一些基础知识,你会录制宏、编辑宏而且了解了录制宏的局限性.你很努力.并且已经为将来学习VBA甚至VB等编程语言打下了基础.

关键是你已经了解了一个谜底,就是说,你了解了什么是编程.下面是些小练习,做完后才可以去玩哟.

思考:

1)VBA只能用于EXCEL吗?

2)VBA是基于哪种语言?

3)说说EXCEL和VBA的关系.

4)为什么要用宏?

第二课 处理录制的宏

2.1 为宏指定快捷键

你也许希望为经常使用的宏指定快捷键。快捷键是指键的组合,当其按下时执行一条命令。例如:CTRL+C

在许多程序中代表“复制”命令。当给宏指定了快捷键后,就可以用快捷键来执行宏,而不必通过“工具”菜单。

注意:当包含宏的工作簿打开时间,为宏指定快捷键会覆盖EXCEL默认的快捷键。例如:把CTRL+C指定给某个宏,那么CTRL+C就不再执行复制命令。用以下方法可以打印出EXCEL的快捷键清单(用A4纸打印共有24页之多):

1)打开EXCEL帮助文件并选择“目录”选项。

2)从“使用快捷键”文件夹中选择“”快捷键“标题。

3)右击该标题,从快捷菜单中选择“打印”。

4)选择“打印所选标题和所有子主题”,单击“确定”。

可以在创建宏时指定快捷键,也可以在创建后再指定。要在创建(录制)宏时指定快捷键,只须在录制宏时在输入宏名后,在“快捷键”文本框中输入相应的键。录制宏后指定快捷键也很简单,只需选择“工具”“宏”,显示“宏”对话框,选择要指定快捷键的宏,再单击“选项”按钮,通过“选项”对话框进行设置。

2.2 决定宏保存的位置

宏可保存在三种可能的位置:

1)当前工作簿。(只有该工作簿打开时,该宏才可用。)

2)新工作簿。

3)个人宏工作簿。

2.3 个人宏工作簿

个人宏工作簿,是为宏而设计的一种特殊的具有自动隐藏特性的工作簿。第一次将宏创建到个人宏工作簿时,会创建名为“PERSONAL.XLS"的新文件。如果该文件存在,则每当EXCEL启动时会自动将此文件打开并隐藏在活动工作簿后面(在“窗口”菜单中选择“取消隐藏”后,可以很方便地发现它的存在。)如果你要让某个宏在多个工作簿都能使用,那么就应当创建个人宏工作簿,并将宏保存于其中。个人宏工作簿保存在“XLSTART”文件夹中。具体路径为:

C:\WINDOWS\Profiles\Application Data\Microsoft\Excel\XLSTART。可以以单词“XLSTART”查询。

注意:如果存在个人宏工作簿,则每当EXCEL启动时会自动将此文件打开并隐藏。因为它存放在XLSTART文件夹内。

2.3.1 保存宏到个人宏工作簿

本练习,将保存一个简单的宏到个人宏工作簿,该宏为文本加下划线并改为斜体,步骤如下:

1)建立一个名为“HOUR2”的工作簿,选择"工具"-"宏"-"录制新宏",显示"录制新宏"对话框.

2)输入"格式化文本"作为宏名.

3)从"保存在"下拉框中选择"个人宏工作簿".

4)单击"确定"按钮.现在进入录制模式.

5)单击"斜体"工具栏按钮.一段时间内,鼠标出现沙漏,特别是在第一次创建个人宏工作簿时,因为EXCEL在创建该工作簿.

6)单击"下划线"按钮.

7)停止录制.

2.3.2 使用并编辑个人宏工作簿中的宏

刚才已经保存了一个宏到个人宏工作簿,现在可以在任何工作簿中使用该宏.可按如下步骤操作:

1)关闭所有EXCEL工作簿.

2)任意打开一个EXCEL文件.(EXCEL自动将个人宏工作簿同时打开并隐藏.)

3)在A3中输入你的名字.

4)选择"工具"-"宏",显示宏对话框.现在可以在宏列表中看到"格式化文本"这个宏.

5)选择"格式化文本"宏,并执行.现在A3单元格中,你的名字变为斜体字还带有下划线.选择"窗口"-"取消隐藏",可以将PERSONAL.XLS显示出来,其中没有任何文字,但通过VBA编辑器可以在其中的模块中找到"格式化文本"这个宏.在VBA编辑器中可以对该宏进行直接编辑或者删除.如果PERSONAL.XLS中一个宏都没有,在启动EXCEL时仍会打开PERSONAL.XLS,这也许是EXCEL存在的一个小毛病.

2.4 将宏指定给按钮

即使通过快捷键可以是宏的执行变快,但是一旦宏的数量多了也难于记忆,而且,如果宏是由其他人来使用,难道你要他们也记住那么多的快捷键吗?

作为EXCEL开发者,一个主要的目标是为自动化提供一个易于操作的界面."按钮"是最常见的界面组成元素之一.通过使用“窗体”工具栏,可以为工作簿中的工作表添加按钮。在创建完一个按钮后,可以为它指定宏,然后你的用户就可以通过单击按钮来执行宏。在本练习中,将创建一个按钮,并为它指定一个宏,然后用该按钮来执行宏。具体步骤如下:

1)打开“HOUR2”工作簿。

2)调出”窗体“工具栏。

3)单击”窗体“工具栏中的“按钮”控件,此时鼠标变成十字形状。

篇三:Windows编程基础(新手入门)

Windows编程基础 第1章

基于Windows的编程方式有两种。一种是使用Windows的API(Application

Programming Interface,应用程序编程接口)函数,通常用C/C++语言按相应的程序框架进行编程。这些程序框架往往就程序应用提供相应的文档、范例和软件开发工具包(Software Development Kit,SDK),所以这种编程方式有时又称为SDK方式。另一种是使用“封装”方式,例如Visual C++的MFC方式,它是将SDK中的绝大多数函数、数据等按C++“类”的形式进行封装,并提供相应的应用程序框架和编程操作。

事实上,无论是哪种编程方式,人们最关心的内容有三个:一是程序入口,二是窗口、资源等的创建和使用,三是键盘、鼠标等所产生的事件或消息的接收和处理。本章就来讨论这些内容。

学习编程往往从简单的例子入手,例如一个C程序常有下列简单的框架代码:

#include

int main()

{

printf("Hello World!\n");

return 0;

} /* 输出 */ /* 指定返回值 */

事实上,该程序已包括C程序中最常用的#include指令、必须的程序入口main函数、库函数printf调用和return语句。由于此程序是在早期的DOS(Disk Operating System,磁盘操作系统)环境的字符模型下运行的,因而printf函数所输出的都是字符流,也就是说,它在屏幕上输出一行文本“Hello World!”。在Windows环境下,这里的屏幕就由控制台窗口来兼作,而基于Windows的上述C程序代码框架肯定是有所不同的。特别地,由于目前所在的Windows环境基本上都是32位,所以这里的Windows程序平台就是Win32,Windows编程可直接理解为是Win32编程。

2 Visual C++教程(第2版) 1.1.1 Windows等价程序

等价的Windows程序可以写成:

HelloMsg.c

#include

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int nCmdShow)

{

MessageBox (NULL, TEXT("Hello, World!"), TEXT("Hello"), 0) ;

return 0 ;

在深入剖析上述程序之前,先来看一看在Visual C++ 6.0中的编辑、连接和运行的 过程:

① 选择“开始”→“程序”→Microsoft Visual Studio 6.0 →Microsoft Visual C++ 6.0,

运行Visual C++ 6.0。第一次运行时,将显示如图

1.1所示的“每日提示”对话框。单击“下一条”

按钮,可看到有关各种操作的提示。如果在“启动

时显示提示”复选框中单击鼠标,去除复选框的选

中标记“”,那么下一次运行Visual C++ 6.0,将

不再出现此对话框。单击“关闭”按钮关闭此对话

框,进入Visual C++ 6.0开发环境。

② 选择“文件”→“新建”菜单命令,打开 图1.1 “每日提示”对话框 }

应用程序向导,显示出“新建”对话框,如图1.2

所示。选择“工程”选项卡,从列表框中选中Win32 Application(Win32 应用程序)项(图

1.2中的标记1)。

③ 单击“位置”编辑框右侧的“浏览”按钮(图1.2中的标记2),从弹出的 “选择目录”对话框指定项目所在的文件夹,如图1.3所示(图中的数字标记表示最经常 的操作次序,下同)。单击“确定”按钮,退出“选择目录”对话框,回到 “新建”对话框中。

需要说明的是,为了便于程序的管理和查找,本书所涉及的程序均放入Visual C++ 6.0

的工作文件夹“Visual C++程序”中,第1章程序放入子文件夹“第1章”中,第2章程序放入子文件夹“第2

章”,依此类推。

④ 在“新建”对话框的“工程名称”编辑框(图1.2中的标记3)中,输入项目名称

Ex_HelloMsg,保留“平台”下Win32复选框的默认“选中”状态,单击“确定”按钮进入下一步。

⑤ 出现Win32

Application向导的“步骤1共1步”对话框,从中可选择要创建的应

用程序类型:“一个空工程”、“一个简单的Win32程序”和“一个典型的"Hello World! "程

第1章 Windows编程基础 3

序”,如图1.4所示。它们的区别在于:“一个空工程”仅创建Win32应用程序文件框架,不含任何代码;“一个简单的Win32程序”是在“一个空工程”基础上添加了程序框架(有入口函数、#include指令等);“一个典型的‘Hello World!’程序”在“一个简单的Win32程序”基础上增加了MessageBox函数调用,用来输出“Hello World!”。

图1.2 “新建”对话框“工程”选项卡 图1.3 “选择目录”对话框

⑥ 选中“一个空工程”,单击“完成”按钮,弹出“新建工程信息”对话框,如图1.5

所示。单击“确定”按钮,系统将按前面的选择自动创建此应用程序。

图1.4 应用程序的向导对话框 图1.5 “新建工程信息”对话框

⑦ 再次选择“文件”→“新建”菜单命令,Visual C++将打开“新建”对话框并自动

切换到“文件”选项卡,如图1.6所示。在左侧的文件类型列表中选中C++ Source File(C++源文件),在右侧的“文件名”编辑框中输入“HelloMsg.c”或输入“HelloMsg.cpp”(文件

扩展名也可不输入,系统会自动添加cpp扩展名,cpp是C Plus Plus的缩写,是C++的 意思)。

⑧ 单击“确定”按钮,系统将在创建的Win32项目工程Ex_HelloMsg中创建并添加

4 Visual C++教程(第2版) 一个新的文件HelloMsg.c,同时打开该文件窗口。现在可以在HelloMsg.c中输入前面例HelloMsg.c中的代码了。输完后,单击编译工具条上的“生成工具”按钮或直接按F7键,系统开始对Ex_HelloMsg项目工程中的文件进行编译、连接,同时在输出窗口中观察出现的内容,当出现

表示Ex_HelloMsg.exe可执行文件已经正确无误地生成了。同时也可看到在文档窗口中所有代码的颜色都发生改变,这是Visual C++ 6.0的文本编辑器所具有的语法颜色功能(绿色表示注释,蓝色表示关键字等)。

⑨ 单击编译工具条上的“运行工具”按钮或直接按Ctrl+F5键,就可以运行刚刚生Ex_HelloMsg.exe-0 error(s), 0 warning(s)

成的Ex_HelloMsg.exe,结果如图1.7所示。单击“确定”按钮,Hello对话框退出。

图1.6 创建并添加程序文件 图1.7 开发环境和运行结果

1.1.2 头文件

HelloMsg.c是一个#include预处理指令开始,实际上在用C/C++编写的Windows应用程序的头部都可以看到这样的指令:

头文件Windows.h是最主要的包含头文件,它还包含了其他一些Windows头文件。 例如:

windef.h: 基本类型定义

内核函数

用户接口函数

图形设备接口函数 winbase.h: wingdi.h: winuser.h: #include

这些头文件定义了Windows的所有数据类型、函数调用、数据结构和符号常量,它们

第1章 Windows编程基础 5

是Windows应用程序文档中的一个重要部分。

1.1.3 程序入口函数

在C/C++程序中,其入口函数都是main。但在Windows程序中,这个入口函数由

WinMain来代替。该函数是在winbase.h中声明的,其原型如下:

int

WINAPI

WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,

可以看出,这个WinMain函数除了形参名、个数与main函数不同外,类型名也有了

新的变化。下面就来分析:

① WinMain函数被声明成为返回一个int值,同时WinMain函数名前还有WINAPI

标识符的修饰。WINAPI是一种“调用约定”宏,它在windef.h中有如下定义:

#define WINAPI _ _stdcall int nShowCmd);

所谓“调用约定”,就是指程序生成机器码后,函数调用的多个参数是按怎样的次 序来传递,同时函数调用结束后堆栈由谁来恢复,以及编译器对函数名的修饰约定等的 协议。

函数调用约定“协议”有许多,其中由WINAPI宏指定的__stdcall是一个常见的协议,内容包括:参数从右向左压入堆栈;函数自身修改堆栈;机器码中的函数名前面自动加下划线,而函数后面接@符号和参数的字节数。

特别地,Visual C++的MFC方式却采用了__cdecl调用约定:参数从右向左压入堆栈;传递参数的内存栈由调用者来维护(正因为如此可实现变参函数);机器码中的函数名只在前面自动加下划线。

② WinMain函数的第一个和第二个参数都是HINSTANCE(实例句柄)类型。

HINSTANCE中,H表示Handle,是“句柄”的意思。在Windows编程中,句柄是一个应用程序用来识别某些资源、状态、模块等的数字。由于句柄唯一标识着对应的资源、状态、模块等,因而使用句柄就是使(调)用相应的资源、状态、模块。

当应用程序运行多次时,每一次都是应用程序的“实例”。由于同一个应用程序的所

有实例都共享着应用程序的资源,因而程序通过检查hPrevInstance参数就可确定自身的其他实例是否正在运行。

③ WinMain函数的第三个参数lpCmdLine用来指定程序的命令行,其参数类型为

LPSTR。但在HelloMsg.c中,却将其改为PSTR。这两种数据类型都是合法的,也都是指向字符串的指针类型。其中的STR是“STRING,字符串”的含义,是指以\0结尾的字符串,LP前缀表示“长指针”,在Win32中它与“P”前缀表示的“指针”含义相同。

④ WinMain函数的第四个参数nShowCmd用来指定程序最初显示的方式,它可以是

正常、最大化或最小化来显示程序窗口。

篇四:编程初学者入门指南

这篇文章大致上是我上次的一个回帖,今天有空就把它整理了出来,希望能造福更多的人。

首先我想说的是,人各有志,不是每一个计算机专业出生的人以后都会去“编程”的,以前和我同寝室的同学,现在在编程的人只有两个,另外的六个有的去当公务员了,有的去类似银行、法院这样的地方做计算机维护什么的,还有一个改行了,现在在做“信贷”。所以你完全有别的选择,如果对编程没有兴趣,建议你还是去干点别的,因为没兴趣的话你坚持不下去的,就算硬着头皮去学,永远也只能跟在别人后面跑,很痛苦的。另外,考研其实是个不错的选择,只可惜要考“政治”和“英语”,不然我也去考了。:)

如果你是一名本科在校生的话,下面的文章就是为你写的;如果你刚刚开始工作不久,也希望下面的内容能对你有所帮助。。。。。。

一。关于计算机本科大学四年的各种必修课

我首先想说的是,并不是每一门必修课都是有用的,而且确实如此。

1。“显然没用”的课是:“大学物理”,这门课你只要做到能有60分就行了。“大学物理”我们是大一学的,由于高中带来的惯性,我学得很认真,可是现在回头来看,它是最没用的一门课,一点用都没有,当然,也许某某会说这是个“素质”问题,当然,如果你这么想的话也行,但是我觉得如果你不是对它十分的感兴趣的话,还是别在这上面花太多的时间,时间宝贵呀。

2。“更显然没用”的如:“XX革命史”、“XX品德”我也就不废话了。

3。“十分有用”的,它们是:“程序设计”、“数据结构”、“操作系统原理”。这三门课,我觉得是整个大学四年最有用的三门课了,而且是直接的有用。“程序设计”,在我们的课表上全称叫做“C++程序设计”,其实就是教会你使用一门高级语言,重要性不言而喻;而且学到后面,比如在学“编译原理”的时候,讲到各种词法分析方法时它就会用C++(我看的那本书用的是C++)来写一些例子,再接着讲,也就是说“程序设计”这门课同时也是用来学习后面很多的课程的工具。“数据结构”可以说是“编程整件事”要使用到的核心技术之一,必须要很好的理解、完全掌握这门课。“操作系统原理”包括了很多东西,都应该很好的掌握,比如“进程和线程”的基础知识如果你掌握的不好,那你以后编“多线程”程序的时候就会碰到很多麻烦;而且,只有理解了操作系统,才有可能编好应用软件,道理很简单,所用的应用软件都必须运行在操作系统之上,都必须调用它的功能。

对于这三门课,最好不要看国人写的教材。“操作系统原理”建议看《操作系统:设计与实现》(第二版),作者Anderw S.Tanenbaum等。此书中译本分上下两册,上册为原理,下册为Minix操作系统的源代码,上册必看,下册根据各人情况有选择的读一些也是好的。“数据结构”建议看《数据结构——C++语言描述》,作者William Ford等,但是裘宗燕的一本《数据结构——C++与面向对象的途径》也还行,如果你们学校用它做教材的话,那你勉强看看也就凑合了。至于“程序设计”,书太多了,《The C++ Programming Language》、《C++ Prime》、《Thinking In C++》、《Thinking In Java》都是好书。另外,说到这里,不得不提到一个问题:以前经常看到有人争论一个问题,就是C++、Java、(现在又多了一门C#)这三种语言到底哪种好?我们应该学习哪一种?这其实是一个无聊的争论,因为它们的80%都是相同的,所以你用“用来争论的这点时间”已经可以在“掌握它们其中之一”的前提下学完另外的两种了,等你精通了这三门语言后,也就不屑于这种争论了,语言本身只是表现思想的一种手段罢了,它们是何等的容易学习!

4。“有用”的课。这些课,不能算是“直接的有用”,也就是说,它们的很多内容你过几年也

许就忘得差不多了,竟然也不会影响你当前的工作。但是,它们是铺垫,是基石。对于这些课,我们的态度应该是,注重基本概念,做到“弄清楚大致的框架”就可以了,但可以忽略不必要的细节(但也许考试的时候会考到一些细节,那你就自己看着办了)。。这些课是:“微机系统与汇编语言”、“计算机组成原理”、“计算机网络”、“软件工程”、“数据库原理”、“计算机接口原理”、“编译原理”、“计算方法”、“离散数学”。“汇编”还是有用的,它是你理解和学习“计算机组成原理”和“计算机接口原理”的钥匙。“计算机组成原理”和“计算机接口原理”其实是给你讲一遍计算机的硬件结构,比如CPU内部是怎么回事,它是怎么计算和缓存的,DMA传输方式是怎么样的等等,弄清楚(或者说曾经弄清楚过,毕竟它们的很多东西你以后会慢慢忘记的)这些东西心里会感觉比较有底。“计算机网络”感觉上和实际的网络编程联系不大,也是为你解释了一些原理性的东西,看了心理比较有底:)。另外“数据库原理”除了讲一些原理以外,一般还会教你SQL语法,其中最难的是各种“查询”语法了,但是到了实际用的时候你会发现,这些是不必要的,一般的“复杂查询语句”都有工具可以自动生成的,不用你自己写的,所以对此你不必担心。“软件工程”其实作为一个本科生来说是不可能很好的理解它的,它必须要有很多实践经验以后,才能体会其中的一些道理,而且国内的“软件工程”教材一般都比较“教条主义”,建议浏览一遍即可,知道个大概,了解一下大型软件的开发流程是怎么样的,就可以了(并且也是需要的),至于其中的诸多概念,重在理解,能理解多少就理解多少,千万不要去“背”,没有用的。“计算方法”这门课现在可以说是实用价值剧减,因为基本上所有的算法都有现成的程序库可以调用的,所以大概了解一下就行了,真到要自己开发算法的时候,不管你当时学得再好,肯定还要回过头来看这些书的,因为这之间你根本不曾使用过它们,早忘记了。至于“编译原理”有人认为它很重要,我认为做个了解,大致上知道是怎么回事就行了,因为你不太可能会去开发一个编译器,但是在实际中用到的机会也是有的,比如我有一次编程时就需要用到“编译原理”的知识来做一个“词法分析程序”,用来处理用户输入的函数表达式,再调用几个库函数来做定积分,但总的来说“编译原理”只对很有限的一部分程序的编写起到了实际的作用,所以,先了解一下,等到用时,再来细看。“离散数学”是前面提到的“数据结构”的理论基础,如果“离散数学”学得好,理解“数据结构”会更容易些,所以还是花点时间看看吧。

推荐一本书:《编译原理及实践》,作者Kenneth C.Louden,此书附录中有一份Tiny语言编译器的源代码,对照着前面的理论来看就不会像清华版的《编译原理》那样不知所云(我们当时用的就是这本教材,后来我去买了Kenneth C.Louden的《编译原理及实践》来看,很多问题才豁然开朗)。

另外,我想说的是,“软件工程学”其实现在才处在一个初级的发展阶段,CMM、XP等等的理论打得不可开交,各说各的理,几乎达到了互相对骂的程度。作为一个初学者,特别是“实践经验缺乏”的初学者,我建议你对各种理论多了解,注意我指的是“了解”,不是去“背”其中的条条框框,当你了解了大多数现在的主流软件工程思想以后,就会形成你自己的比较客观的思想了,当然还需要结合一些实践的经验,这是以后的事了。至于看哪些书,太多太多了,自己去找吧。

5。“不太有用”的。其实说这些课“不太有用”已经是客气的了,它们其中的一些其实就是“没用”。这些课是:“自动控制原理”、“通信原理”、“电路原理”、“数字电路原理”、“模拟电路原理”、“复变函数与积分变换”、“线性代数”、“概率论与数理统计”、“高等数学”。其中,“自动控制原理”和“通信原理”我感觉和实际的编程相差得实在是太远了,我学过它们可是现在全忘了,也不影响我现在的任何东西。“电路原理”、“数字电路原理”、“模拟电路原理”这三门课讲起来也是计算机学科的基础课,我只觉得“数字电路原理”对于理解比如“计算机组成原理”和“计算机接口原理”这样的课还有一些帮助,但是另两门课,我实在发现不了它们到底有用在哪里,比如“模拟电路原理”主要是教你“三极管的内部构造”之类的东

西,如果你觉得这也属于“必须要掌握的东西”的话,那我也无话可说。另外,“复变函数与积分变换”是“数字图象处理”(这是一门研究生课程)的基础,如果以后想到Adobe去工作的人,还是应该趁早学好它们,但是除此以外,好像也是别无他用。“线性代数”、“概率论与数理统计”和“高等数学”我倒觉得是属于所谓的“素质”了,这些东西不懂好像就说不过去了,但是要懂到什么程度,各人自己看了。另,“高等数学”也是“复变函数与积分变换”的基础。

6。英语。这门课很特殊,很有用,总之一句话,现在学好了以后绝对不会后悔。:)

二。关于课外的学习

首先我想说的是,如果有志以后成为“优秀的程序员”的人,应该从大学就开始自己的“课外自学”了,这是很必要的,否则你会一开始就落在别人后面。另外,不要以为“所有的基础课都学得十分的好了”就可以“用比别人短得多的时间来学会各种实际的编程技术”。 (还有,我想说明的是,我只了解Windows编程,Linux我不懂。所以你以后如果立志于Linux领域的,我下面的文章对你不会有多少帮助)

1。主线。

作为“主线学习”。我建议这样进行:首先看这两本书:《Windows 程序设计》(第五版),作者Charles Petzold;《Windows 核心编程》(第四版) ,作者Jeffrey Richter;毫无疑问,此两本书必看!否则你永远也不可能成为一个专业的、高级的程序员(我指Windows程序员)。另,看《Windows 核心编程》以前需要有“操作系统原理”的基础。同时,如果学的是C++(在目前,C++在中国仍然是使用最广泛的编程语言),只看看你们的教材是肯定不够的,除了上面说的《The C++ Programming Language》等书(挑一本看就够了)以外,还应该看看《Effective C++ 中文版》,作者Scott Meyers。接下来,我建议你不要去学MFC了,它已经过时了,而且确实不太好用,我回想起当年学MFC的情景,总是觉得付出和得到不成正比。这时候可以去学“.NET”编程了,先学一下C#的语法(Tom Archer的《C#技术内幕》还算不错),你会发现它极容易,可以飞速的看完,因为你已经有了很好的C++基础了。然后再找一本比较全面介绍“.NET”的书看起,现在的话,我觉得《.NET 程序设计技术内幕》是个不错的选择,作者Jeff Prosise。我这里不是说学“.NET”就看这两本书就OK了,但是作为一个“学生”,能看到这里就不错了(当然你要是觉得还不够的话可以去看看Jeffrey Richter的《Applied Microsoft.NET Framework Programming》)。还有,在学习各种编程技术期间编一些自己的小程序是必不可少的,不然的话,你会学什么忘什么。最后,再有时间的话,学一学“设计模式”(它其实很重要的,而且慢慢的你会觉得它越来越重要),书蛮多,《设计模式》值得推荐(作者Erich Gramma等),它是“设计模式”类书籍的宗师,很不错的书,“设计模式”也是要一些实践经验作铺垫的,因此你可能不能完全的理解它。

2。支线。

作为支线,也就是说我觉得它们相对次要些。并且学习它们可以不分先后次序,但是,我还是建议先看完上面说的前三本书(《Windows 程序设计》、《Windows 核心编程》、《Effective C++ 中文版》)以后再来学下面的东西。

“Java”。。把“Java”作为支线一定会引起很多人的不满,或者说是愤慨,当然,你也可以把它作为主线来学,用来替代上面说的“.NET”。可是根据我自己的体会,“.NET”拥有更多的优势,如果你不同意我的观点,当然可以去学“Java”,没问题。但是作为一个“初学者”,我还是建议你两样都学一下,这样自己才能有比较,才能为自己的将来选择一条更适合自己的“技术路线”。另外,时间还是多的(主线中才提到了六本书),而且,我这里说的“学Java”只建议你看一本书:《Thinking in Java》,这本书可以说是入门的绝佳选择,至于以

后怎么继续学习“Java”,可以去看看蔡学庸在CSDN上的专栏文章,里面讲得很详细了。

“网络编程”。。这个东西我想很多人都是比较向往的。我建议如果想做到对网络编程“比较精通”的话,应该去看看《Windows 网络编程技术》(第二版),作者Anthony Jones。这本书和上面讲的《Windows 程序设计》属于同一个技术层次,都是用“Windows API”直接编程,学这类东西的好处是能使你不仅“知其然”而且“知其所以然”。但是,如果立志要学“Java”的,也可以跳过这本书,直接看《Java Network Programming》,是O'Reilly的书,作者我忘记了。至于“.NET”方面,我还没发现专门讲网络编程讲得特别好的书,自己去找找吧。(其实一般的“.NET”书籍中已经有大量关于网络编程的内容了)

“COM”。。“以前的学习方法”是先看《深度探索C++ 对象模型》,作者Stanley B.Lippman;再看《COM 本质论》(作者Don Box)的前面两章,然后看《COM 原理与应用》(作者潘爱民),再回过头来看《COM 本质论》的后面部分。《COM 本质论》的前面两章讲得极好,它用最能让人理解的方式讲述了“什么是COM”,但这本书的后面部分比较晦涩,如果没有一点实际的“COM程序编写经验”,就很难理解了,所以我提到这里要插进来看一看潘爱民的《COM 原理与应用》。但是,这里有一个问题,《COM 原理与应用》里的应用部分使用的是MFC和ATL(抱歉我又提到了这些过时的东西,我只是对它们太熟悉了),我前面曾建议大家不要去学MFC了,于是产生了矛盾,请恕我无知,在当前的情况下,我不太能肯定要怎么学习“COM”才是最有效的,这里我确实不能给大家“更新的方法”了。但是现在随着“.NET”的推进,“COM”的生存空间似乎是越来越小了,因此“到底要把COM学到什么程度”也几乎成了“到时候看情况再说”的问题了。但是,我觉得无论如何了解一下“COM的基本思想”还是能带来莫大的好处,它太经典了!也就是我上面说的《COM 本质论》的前面两章。

“DDK”。。所谓“DDK”就是“设备驱动程序”,这属于一个相对冷僻的方面,但事实是“正因为它冷僻,所以这方面的技术人员的收入还是不错的”,但是“DDK”的知识对你学习别的很多东西(比如“.NET”、“Java”)都不会带来任何的帮助,它比较独立。所以我的建议是“在你还没有能力确定以后自己的专攻方向时,不要去学它”,因为它实在也不太好学。我对它只是略知一二,所以也只能说到这里就作罢了。不过可以给你推荐一本书:《Programming Microsoft Windows Driver Model》,(作者Walter Oney)。

好了好了,再下面就绝对要超出“初学者”的范畴了。其实学到这里,再加上你已经积累了一定的实际经验了,那下面再要学些什么,路要怎么走,就一定会有自己独立的想法了。我就不再废话了。

三。几个初学者要注意的问题

1。无论在学基础课的时候,还是在学实际的编程的时候,都是重在理解,千万不要死记硬背。比如上面说的“软件工程”就是最好的例子。有一次,我碰到两个人正在讨论MFC,“甲”说:“我觉得MFC真是复杂,这么多的类和方法,根本不知道怎么去学。”这时“乙”表示他也有同感,但是已经找到了学习的方法,于是“乙”很诚恳的对“甲”说:“其实有时候还是要背一些东西的,你可以去买一本中文版的MFC类库手册,天天背,天天记,慢慢的就好了。”。我当时从旁边走过,打了一个冷颤。。对于MFC这种东西,除了理解还要多用,很多东西自然就记住了,当然这么多的类和函数还是没能记住它们的确切名字和用法,但是别着急,你已经知道了有哪些类和方法大概是存在的,所以真到用的时候再到“MSDN”里去找呗,怕什么呢。

2。我前面提到了《Windows 程序设计》和《Windows 核心编程》这两本书是必看的,它们都是在介绍基于“Win32 SDK” 平台(或者说是接口)的编程,也就是用“Windows API”直接

编程,这是一种十分底层的Windows编程方法。就今天来说,学习“Win32 SDK”编程的意义更大的在于“使你能够更彻底的理解基于它们之上的、包装得更好的、更易于使用和效率更高的各种技术,以便能更好的使用它们”,比如“MFC”、“.NET”等等。如果你一定要在实际的开发中也直接用“Windows API”来编程,无疑是自讨苦吃。因此,我们要鼓励使用各种开发效率更高的工具,当然,理解“Win32 SDK” 平台的编程能在你使用这些高级工具的时候给你带来巨大的好处。“网络编程”也是同理,我上面提到的那本《Windows 网络编程技术》也是基于Winsock(它是Win32 SDK的一部分)的书,实际编程的时候,你也许不太会直接去用它。

3。实践很重要。这个道理是很明显的,比如C++的语法,如果你不去用它的话,就算你当初能把整本书都背下来,到了大四的时候肯定也忘得差不多了。用的过程其实就是熟悉的过程,在用的时候可能会发现自己某一个细节怎么又想不起来了,没关系,正常的,再拿来书翻开看看,如此反复几次也就记住了。

4。坚持很重要。这里有一个前提,就是“你是真的对编程很有兴趣”,如果确实如此,那不用说你也会去不断的学习的。但如果不是这样,那就很糟糕了,就像我开头的时候提到的那个人,他就是“实在对编程没兴趣呀”,所以一直工作的很辛苦,感到身心疲惫,还总是落在别人后面,现在终于不得以该行去作“信贷”了。

5。关于“高级程序员”考试。这个考试其实是名不副实的,他分上午场和下午场,上午考一些基础概念,也就是上面提到的那些本科课程中比较重要的几门课,考试难度和形式都和你们的期末考试差不多,下午考编程,其实就和你们的“程序设计”期末考试最后的几道编程题差不多。一句话,考的是很理论的东西,死读书的人一般都能通过的:)。如果你了解到你以后要去应聘的公司对这张证书比较看重的话,那就花一些时间去复习一下以前的课程,去拿一张证书,像我的两个去当公务员的同学居然也都通过了这个考试。但是如果这张证书不是你就业的前提的话,我建议你不要在这上面花时间了,因为它太简单了,对提高你的实际水平没有帮助的。当然这只是我的个人观点,没有蔑视这项考试的意思。

6。也许你的志向是当一个“技术总监”,或是“XX主管”之类的,也就是所谓的“不写代码的人”,当然,很多人都这么想。但是,请记住,这些人其实都有着很好的实际编程经验,如果没有这段经历和积累,他们根本就到达不了现在的境界,也不能服众。所以,趁早多学一些“技术”是很必要的。

7。最后我想提醒各位,虽然至此你可能已经觉得自己“学识满腹”了,但是千万不要以为自己懂的多了,就开始自以为是,开始看不起别人了。我曾经有幸听过“钱能”老师的课,他给我印象最深的一句话就是:“你越学就应该越是觉得自己无知啊,怎么这么多东西自己都不懂呢?所以要谦虚啊,要谦虚啊,千万不能学了一点点东西就自认为了不起了。”

篇五:COM编程入门

COM编程入门

第一部分——什么是COM,如何使用COM

(转 载 于:wWW.smHAida.cOM 海达范文网:编程入门)

编译:赵湘宁

点击查看

本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念。内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。本文不包括如何编写自己的COM对象和接口。

COM即组件对象模型,是Component Object Model 取前三个字母的缩写,这三个字母在当今Windows的世界中随处可见。随时涌现出来的大把大把的新技术都以COM为基础。各种文档中也充斥着诸如COM对象、接口、服务器之类的术语。因此,对于一个程序员来说,不仅要掌握使用COM的方法,而且还要彻底熟悉COM的所有一切。

本文由浅入深描述COM的内在运行机制,教你如何使用第三方提供的COM对象(以Windows 外壳组件Shell为例)。读完本文后,你就能掌握如何使用Windows操作系统中内建的组件和第三方提供的COM对象。

本文假设你精通C++语言。在例子代码中使用了一点MFC和ATL,如果你不熟悉MFC和ATL也没关系,本文会对这些代码进行完全透彻的解释。本文包括以下几个部分:

? COM——到底是什么?——COM标准的要点介绍,它被设计用来解决什

么问题

? 基本元素的定义——COM术语以及这些术语的含义

? 使用和处理COM对象——如何创建、使用和销毁COM对象

? 基本接口——描述IUnknown基本接口及其方法

? 掌握串的处理——在COM代码中如何处理串

? 应用COM技术——例子代码,举例说明本文所讨论的所有概念

? 处理HRESULT——HRESULT类型描述,如何监测错误及成功代码 COM——到底是什么

简单地说,COM是一种跨应用和语言共享二进制代码的方法。与C++不同,它提倡源代码重用。ATL便是一个很好的例证。源码级重用虽然好,但只能用于C++。它还带来了名字冲突的可能性,更不用说不断拷贝重用代码而导致工程膨胀和臃肿。

Windows使用DLLs在二进制级共享代码。这也是Windows程序运行的关键——重用kernel32.dll, user32.dll等。但DLLs是针对C接口而写的,它们只

能被C或理解C调用规范的语言使用。由编程语言来负责实现共享代码,而不是由DLLs本身。这样的话DLLs的使用受到限制。

MFC引入了另外一种MFC扩展DLLs二进制共享机制。但它的使用仍受限制——只能在MFC程序中使用。

COM通过定义二进制标准解决了这些问题,即COM明确指出二进制模块(DLLs和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言(如C++中的命名修饰)。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更容易地使用这些二进制代码。

在内存中,COM对象的这种标准形式在C++虚函数中偶尔用到,所以这就是为什么许多COM代码使用C++的原因。但是记住,编写模块所用的语言是无关的,因为结果二进制代码为所有语言可用。

此外,COM不是Win32特有的。从理论上讲,它可以被移植到Unix或其它操作系统。但是我好像还从来没有在Windows以外的地方听说过COM。 基本元素的定义

我们从下往上看。接口只不过是一组函数。这些函数被称为方法。接口名字以大写的I开头,例如C++中的IShellLink,接口被设计成一个抽象基类,其中只有纯粹的虚拟函数。

接口可以从其它接口继承,这里所说的继承的原理就好像C++中的单继承。接口是不允许多继承的。

coclass(简称组件对象类——component object class)被包含在DLL或EXE中,并且包含着一个或者多个接口的代码。组件对象类(coclasss)实现这些接口。COM对象在内存中表现为组件对象类(coclasss)的一个实例。注意COM“类”和C++“类”是不相同的,尽管常常COM类实现的就是一个C++类。

COM服务器是包含了一个或多个coclass的二进制(DLL或EXE)。

注册(Registration)是创建注册表入口的一个过程,告诉Windows 操作系统COM服务器放在什么位置。取消注册(Unregistration)则相反——从注册表删除这些注册入口。

GUID(谐音为“fluid”,意思是全球唯一标示符——globally unique identifier)是个128位的数字。它是一种独立于COM编程语言的标示方法。每一个接口和coclass有一个GUID。因为每一个GUID都是全球唯一的,所以避免了名字冲突(只要你用COM API创建它们)。有时你还会碰到另一个术语UUID(意思也是全球唯一标示符——universally unique identifier)。UUIDs和GUIDs在实际使

用时的用途是一样的。

类ID或者CLSID是命名coclass的GUID。接口ID或者IID是命名接口的GUID。

在COM中广泛地使用GUID有两个理由:

1. GUIDs只是简单的数字,任何编程语言都可以对之进行处理;

2. GUIDs可以在任何机器上被任何人创建,一旦完成创建,它就是唯一的。

因此,COM开发人员可以创建自己特有的GUIDs而不会与其它开发人员所创建的GUIDs有冲突。这样就消除了集中授权发布GUIDs的必要。 HRESULT是COM用来返回错误和成功代码的整型数字。除此之外,别无它意,虽然以H作前缀,但没有句柄之意。下文会对它有更多的讨论。

最后,COM库是在你使用COM时与你交互的操作系统的一部分,它常常指的就是COM本身。但是为了避免混淆才分开描述的。

使用和处理COM对象

每一种语言都有其自己处理对象的方式。例如,C++是在栈中创建对象,或者用new动态分配。因为COM必须独立于语言,所以COM库为自己提供对象管理例程。下面是对COM对象管理和C++对象管理所做的一个比较: 创建一个新对象

C++中,用new操作符,或者在栈中创建对象。

COM中,调用COM库中的API。

删除对象

C++中,用delete操作符,或将栈对象踢出。

COM中,所有的对象保持它们自己的引用计数。调用者必须通知对象什么时候用完这个对象。当引用计数为零时,COM对象将自己从内存中释放。

由此可见,对象处理的两个阶段:创建和销毁,缺一不可。当创建COM对象时要通知COM库使用哪一个接口。如果这个对象创建成功,COM库返回所请求接口的指针。然后通过这个指针调用方法,就像使用常规C++对象指针一样。 创建COM对象

为了创建COM对象并从这个对象获得接口,必须调用COM库的API函数,CoCreateInstance()。其原型如下:

HRESULT CoCreateInstance (

REFCLSID rclsid,

LPUNKNOWN pUnkOuter,

DWORD dwClsContext,

REFIID riid,

LPVOID* ppv );

以下是参数解释:

rclsid:coclass的CLSID,例如,可以传递CLSID_ShellLink创建一个COM对象来建立快捷方式。

pUnkOuter:这个参数只用于COM对象的聚合,利用它向现有的coclass添加?a href="http://www.zw2.cn/zhuanti/guanyuluzuowen/" target="_blank" class="keylink">路椒ā2问滴猲ull表示不使用聚合。

dwClsContext:表示所使用COM服务器的种类。本文使用的是最简单的COM服务器,一个进程内(in-process)DLL,

所以传递的参数值为CLSCTX_INPROC_SERVER。注意这里不要随意使用CLSCTX_ALL(在ATL中,它是个缺省值),

因为在没有安装DCOM的Windows95系统上会导致失败。

riid:请求接口的IID。例如,可以传递IID_IShellLink获得IShellLink接口指针。

ppv:接口指针的地址。COM库通过这个参数返回请求的接口。 当你调用CoCreateInstance()时,它负责在注册表中查找COM服务器的位置,将服务器加载到内存,并创建你所请求的coclass实例。以下是一个调用的例子,创建一个CLSID_ShellLink对象的实例并请求指向这个对象IShellLink接口指针。

HRESULT hr;

IShellLink* pISL;

hr = CoCreateInstance ( CLSID_ShellLink, // coclass 的CLSID

NULL, // 不是用聚合

CLSCTX_INPROC_SERVER, // 服务器类型

IID_IShellLink, // 接口的IID

(void**) &pISL ); // 指向接口的指针

if ( SUCCEEDED ( hr ) )

{

// 用pISL调用方法

}

else

{

// 不能创建COM对象,hr 为出错代码

}

首先声明一个接受CoCreateInstance()返回值的HRESULT和IShellLink指针。调用CoCreateInstance()来创建新的COM对象。如果hr接受到一个表示成功的代码,则SUCCEEDED宏返回TRUE,否则返回FALSE。FAILED是一个与SUCCEEDED对应的宏用来检查失败代码。

删除COM对象

前面说过,你不用释放COM对象,只要告诉它们你已经用完对象。IUnknown是每一个COM对象必须实现的接口,它有一个方法,Release()。调用这个方法通知COM对象你不再需要对象。一旦调用了这个方法之后,就不能再次使用这个接口,因为这个COM对象可能从此就从内存中消失了。

如果你的应用程序使用许多不同的COM对象,因此在用完某个接口后调用Release()就显得非常重要。如果你不释放接口,这个COM对象(包含代码的DLLs)将保留在内存中,这会增加不必要的开销。如果你的应用程序要长时间运行,就应该在应用程序处于空闲期间调用CoFreeUnusedLibraries() API。这个API将卸载任何没有明显引用的COM服务器,因此这也降低了应用程序使用的内存开销。

继续用上面的例子来说明如何使用Release():

// 像上面一样创建COM 对象, 然后,

if ( SUCCEEDED ( hr ) )

{

// 用pISL调用方法

// 通知COM 对象不再使用它

pISL->Release();

}

接下来将详细讨论IUnknown接口。

基本接口——IUnknown

体裁作文