将所有C#管理的快感放弃,回到Petzold的《Windows编程》中,尝试使用纯WinAPI编写代码,这样做有意义吗?
从中可以学到什么?它不是太过时而无用吗?
这个问题涉及到宗教信仰的层面 :) 但我还是会分享我的想法。
我认为学习Win32 API是有价值的。大多数GUI库(托管或非托管)都需要调用Win32 API。即使是最全面的库也无法覆盖API的100%,因此总会有一些需要通过直接API调用或P/Invoke来填补的空白部分。一些包装器的名称与基础API调用的名称相似,但这些名称并不是完全自解释的。因此,了解底层API以及其中使用的术语将有助于理解包装器API以及它们实际执行的操作。
此外,如果您了解框架所使用的底层API的性质,则在特定情况下选择哪个库功能将更加明智。
干杯!
我在学习Win32 API之前,多年来一直坚持使用标准的C/C++,坦率地说,“学习Win32 API”这部分并不是我生命中最好的技术经验。
一方面,Win32 API相当酷。它就像C标准API的扩展(当您可以使用CreateFile
时,谁需要fopen
)。但我猜UNIX/Linux/WhateverOS也有同样的小玩意函数。无论如何,在Unix/Linux中,它们拥有“一切都是文件”。在Windows中,他们有“一切都是...窗口”(不开玩笑!请参见CreateWindow
!)。
另一方面,这是一个遗留的API。您将处理原始的C和疯狂的C。
void *
指针传递自身大小的结构到一些 Win32 函数中。delete this ;
的时候,会有很有趣的时刻)。const
is for dummies"或"我不使用命名空间,因为它们会降低运行时速度",甚至更好的"嘿,谁需要C++?我用自己的面向对象的C编程!!!"(真的...在一个专业环境中,结果相当惊人...),你会感到一种只有被判刑的人才会感到的恐惧guillotine。无论如何,你会发现雷蒙德·陈的博客非常有趣,因为他拥有对Win API及其多年演变的内部视角:
当然。如果没有人了解底层,谁会更新和编写高级语言呢?另外,当你理解底层知识时,你可以在高级语言中编写更有效率的代码,并且可以更有效地进行调试。
假设你正在构建针对Windows的应用程序:
假设你正在为“Web 2.0”世界构建应用程序,或者对Unix和MacOS用户同样有用:
比喻:如果你以制造汽车为生(编程),那么了解发动机的工作原理(Win32)非常重要。
这是对任何像“即使有更高级的语言/ API Y,学习低级语言/ API X是否有意义”的问题的回答。
是的
你能够启动你的Windows PC(或任何其他操作系统),并在SO上提出这个问题,因为微软的几个人编写了16位汇编代码来加载你的操作系统。
你的浏览器之所以能工作,是因为有人用C语言编写了一个操作系统内核,为所有浏览器的请求提供服务。
它一直延伸到脚本语言。
无论大小,都存在在任何抽象层次上编写某些东西的市场和机会。你只需要喜欢它并适合正确的工作。
除非有更好的竞争对手处于同一级别,否则在任何抽象层面上都没有不相关的api /语言。
另一种看待它的方式:Michael Abrash的一本书中的一个很好的例子:一位C程序员被赋予编写清除屏幕的函数的任务。由于C是比汇编更好(更高级)的抽象,程序员只知道C,并且精通。他尽了最大努力-他将光标移动到屏幕上的每个位置并清除那里的字符。他优化了循环,并确保它尽可能快地运行。但是仍然很慢...直到有人进来说有一些BIOS / VGA指令或其他东西可以立即清除屏幕。
了解你所走的路总是有帮助的。
学习一门新的编程语言或技术通常有以下三个原因:
1. 需求:你正在为构建 Web 应用程序启动项目,但你不知道 ASP.NET。
2. 热情:你非常兴奋 ASP.NET MVC。为什么不试一试呢?
3. 空闲时间:但是谁会有那个时间呢。
学习新东西最好的理由是有需求。如果你需要做一些 .NET 框架无法胜任的事情(比如性能),那么 WinAPI 就是你的解决方案。在此之前,我们可以忙于学习 .NET。