`
izuoyan
  • 浏览: 8880472 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

现在该不该学习Win 32 API和汇编?

阅读更多

现在该不该学习Win 32 API和汇编?

——《.NET 2.0面向对象编程揭秘》勘误兼回答读者问题

本书出版以来,陆续收到了一些读者的邮件,或者探讨技术,或者指出疏漏。感谢热心而且细心的读者,你们对技术认真执著的精神很让我感动。今后,我会在本博客上给《.NET 2.0面向对象编程揭秘》提供一个勘误表,将发现的疏漏公布。

最近收到山东师范大学张超同学的邮件:

===========================

金老师:
你好,我是山东师范大学的一名大三学生,……(中间的文字与本文关系不大,略去),我现在还有个困惑想请教一下老师:现在还有没有必要再学传统的Windows程序设计(我指的是WindowsAPI编程,不知这样说合不合适),是不是.NET的出现淘汰了这个技术?另外有没有必要学习汇编语言,是不是学了编出的程序效率高一些?请金老师指点一下。

另外老师的著作《.NET2.0面向对象编程揭秘》中有两个地方好像不太完善:

一.
第259页浅复制的那段代码中的“ return obj; ”我个人认为应改为 “return newObj;”,要不然复制后的对象也指向原对象了。

二.

第253页信息的双向传送中下面这个过程有点小问题:
Private Sub ChangeProgressBarValue(ByVal IsIncrease As Boolean)

If IsIncrease Then '增值
If Me.ProgressBar1.Value = 100 Then
Me.ProgressBar1.Value = 0 '重新开始
Else
Me.ProgressBar1.Value += 2
End If
Else '减值
If Me.ProgressBar1.Value = 0 Then
Me.ProgressBar1.Value = 0 '不允许再减少了
Else
Me.ProgressBar1.Value -= 2
End If
End If

'显示信息
Me.lblInfo.Text = String.Format("{0}%", Me.ProgressBar1.Value)

'向主窗体的公有方法向其传送信息
Me.frmMainForm.SetValue(Me.ProgressBar1.Value)

End Sub

当我手工把主窗体中NumericUpDown1的值改为99后(当然这是我故意的),再单击从窗体上的“增加值”按钮会产生异常,程序的健壮性还不是很好,不过老师是为了说明信息的传递原理,可能就没太关注这个了。

==============================
我的回答:

你发现的第一个问题是我的疏漏,确实应该改为newObj;

第二个问题很好解决,将

If Me.ProgressBar1.Value = 100 Then
改为

If Me.ProgressBar1.Value >= 100 Then

即可。
有关程序健壮性的问题是比较麻烦的,因为程序实际运行时可能出现的情况太多了,拿本例来说,用户也完全可能输入的不是数字,而是字符,特别地,有可能是全角数字……。但除非作为一个商业程序,一些简单的示例可以不必考虑得过多,不这样做,细节就淹没了主题。

关于Win 32 API和汇编该不该学习的问题,我很难回答“该”还是“不该”。一切应该从学习者本人的情况出发决定。

Win32 API 有数千个C语言形式的函数,涉及到Windows操作系统的许多运行机理,花功夫学习可以对Windows操作系统有深入的了解,对写出高质量的软件有帮助。另外,至少到目前,Win32 API 仍然是调用Windows操作系统的核心功能的主要手段之一,最新的Vista仍然是NT平台的技术(其版本为6.0),这就是说,仍然在底层使用Win32 API。从这个意义上说,学Win32 API是有用的。但要注意,没有一个技术是可以长盛不衰的,win 32 API也一样,迟早会被更好的技术取代。Windows应用程序的开发日益转向使用.NET是微软坚定不移的战略,其思想是用面向对象的类来取代传统的函数,即使用面向对象的类而不是结构化编程时代的函数来调用操作系统功能。因此,如果你主要从事应用系统的开发,与操作系统底层技术细节关系不大的话,确实可以不去花大量时间对Win32 API深挖细掘。而且Windows本身源码不公开,是个“黑盒”,学习起来也不方便。

你如果因为想深入了解操作系统这一目的而学习Win32 API,建议先去学习大学计算机专业课——《操作系统》,然后,直接研究开源的LINUX是较好的选择。

再谈谈汇编。

汇编语言有许多种,目前高校中讲授的大多是PC上最早源自8086系列的汇编语言,虽然现在很少直接用汇编来写应用程序,但与Win32 API不一样,我还是建议在校学生好好学学汇编,但其目的不是为了直接写应用级别的程序,而是通过它来深入地了解计算机。

汇编本身属软件范畴,但与硬件关系密切,学习它有助于更好地了解计算机体系结构。你只要抱着“我想弄清楚计算机内部是什么样的,软件是如何控制硬件干活的”这个目的去学就行了。另外,如果你想向硬件方向发展,汇编与C语言是必须下功夫扎实掌握的硬件工程师基本功之一。

还要指出一点,汇编技术也是现代软件编译器的基础技术之一,通过分析编译器为应用程序生成的汇编代码,有助于写出高效率高质量的代码,也有助于定位程序BUG。我在写作《.NET 2.0面向对象编程揭秘》一书时,就是通过直接阅读C#编译器生成的IL源码,对CLR和面向对象技术才有了较以前仅使用面向对象语言编程时更多更深入的了解。这些心得,我都写在书中了。

总结一下:知识都是有用的,但每个人的定位不一样,发展方向也不一样,因此,没有必要什么知识都去学,也不要对各种知识和技术平均分配精力。有所不为才能有所为,要绕着自己的长处与兴趣点去分配时间和精力,要在某个最适合发挥自己长处的领域做到出类拔萃,在此基础上,对于其他领域的知识,大致了解就够了。样样都懂,却样样不精,难有成就。对于目前这种知识爆炸的现状,我认为这是唯一可取的策略。

分享到:
评论

相关推荐

    罗云斌win32汇编.rar

    ”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...

    win32汇编程序设计教程

    ”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...

    汇编语言推箱子win32 API

    这是改编自网上的资源,解除了炸弹即作弊系统,但是应该显示的时间没有出现,以前调试成功了。希望后来之人能够改正。用radasm这款软件编译,路径名必须改,因为那是在另一台电脑上运行。

    Win32汇编语言程序设计(罗云彬)chm

    ”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...

    Win32 API函数大全

    最近在汇编课程学习中,找到这些资源,挺好用的。大家可以好好参考了

    贪食蛇(win32汇编)

    用windows环境下的汇编语言编写的贪食蛇游戏,采用直接调用API的方式,对于想在WIN32汇编上有所学习的朋友们很有用哦~

    WIN32汇编程序设计详尽教程

    Windows环境下32位汇编语言是有区别于DOS编程。教程介绍使用API接口,从编写实例程序入手,通过多个实例逐渐深入Win32汇编语言的方方面面。是了解汇编语言程序设计的好教程。

    win32 api 函数大全使用详解

    api函数是32位汇编程序的核心,详尽的资料有助于让你开发事倍功半! 不可多得的编程资料

    win32.hlp WIN32的API帮助文档

    win32.hlp WIN32的API帮助文档,很多汇编IDE里用的帮助就是这个,这是一个比较全的版本。其实还是MSDN好,但这个更专只专对API

    Win32环境下汇编语言程序设计+罗云彬(完整版)

    Windows环境下32位汇编语言是一种全新的编程语言。它使用与C++语言相同的API接口,不仅可以用来...”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。

    经典汇编教程Win32Asm教程

    先来对这个教程做个小小的介绍。Win32Asm不是一个非常流行的编程语言,而且只有为数不多(但很好)的教程。大多数教程都集中在编程的win32部分(例如...这份教程的目的是在解释用汇编编Win32程序的同时学习汇编语言本身

    Win32汇编语言教程

    ”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...

    Win32汇编语言 罗云彬

    ”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...

    win32 汇编 教程 加IDE RADASM

    汉化增强版适合于未安装Masm32及Viusual C++的用户,添加了RadASM的帮助文件及Win32 Api等帮助文件。RadASM可通过添加ini文件来支持别的语言,可以自己配置ini文件来支持你所使用的编程语言。此汉化增强版根据网友...

    masm32软件 win32汇编 MASM32是面向WIN32程序开发的

    MASM32是面向WIN32程序开发的,MASM611是面向DOS的,MASM32不使用中断调用了,而是使用微软的应用程序开发接口API和其他高级开发语言差不多了。而MASM611才是使用中断。 解压后大约15M 而压缩后才3.4M 分享学习的...

    MASMPlus,win32汇编集成环境

    这是一个支持win32汇编的集成开发环境,汇编关键字高亮显示,能够提示MSDN api参数的使用,非常适合开发win32汇编程序

    windows环境下32位汇编语言程序设计

    言下之意就是:学汇编就是为了了解高级语言底下一层的功能,但现在Win32汇编却使用和C++等语言相同的API接口,既然和高级语言处于同一个级别,我们为什么还要去和机器指令打交道呢,还不如去学Visual C++方便。...

    罗云彬win32汇编语言程序设计 chm版

    学了16位汇编的都来看一下这个把。对于掌握dos汇编转到windows下面来基本上都是API的调用了。。。该书是反汇编入门书籍。

    win32asm汇编语言-罗云彬

    ”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...

Global site tag (gtag.js) - Google Analytics