2009-02-03 18 views
27

由于查尔斯Petzold的书代码一个大风扇的注释图灵我在他的书编程Windows教导Win32编程中C.我是一个大一计算机专业的学生谁第一个学过C来了,但我用C#和.NET for Windows编程,所以我想知道Win32是否仍然与专业Windows程序相关。作为一名想要编程Windows应用程序的学生,本书涵盖的深入学习Win32 API对我来说是否值得?Win32编程与现代专业人员的相关性如何?

+0

这个问题的重复:http://stackoverflow.com/questions/5507/does-it-still-make-sense-to-learn-low-level- winapi-programming – MarkJ 2009-03-12 23:03:23

回答

30

这真的取决于您想要开发的应用程序种类。对于大多数目的来说,C#和.NET是完全适合的。但是,某些类型的应用程序需要尽可能少的依赖关系(想到了外壳扩展),这些应用程序不适合用作.NET应用程序。对于那些你需要Win32的。

与往常一样,即使您在大多数工作中使用.NET,也至少对Win32有基本的了解。

12

在我看来,没有。我很久以前就知道了,所以你不必!

我认为你首先学习C很棒,而且我会不时地写C程序,但是我不明白为什么win32 API会深入挖掘。老实说,这是一个大混乱。

+3

那么,肯定有一些有用的低级函数,只能从wind32 api调用,即使在托管c# – mmcdole 2009-02-03 08:56:17

+5

是的,这是一个大混乱。这就是为什么它知道你的方式是有用的... – Treb 2009-02-03 11:56:34

+2

5年前,我花了100%的时间在win32上。现在为0%。与其他我需要学习的东西相比,我不认为它每天都会对我有所帮助。它作为历史很有用,就像我脑海中的Z80和6502操作码一样。 – Nosredna 2009-02-03 16:21:11

0

有些东西不能没有赢的API调用,但随着.NET那些东西每个版本做越来越少了,所以没有我不会学胜API,如果我在那里你...

29

我完全同意乔尔斯波斯基在他的许多伟大的作品之一articles中写道。我认为了解机器的底层不仅要能够编写高质量的代码,还要能够解决不可避免会出现的问题。

所以,是的,重要的是至少知道WIN32 API的基础知识可能不深入,但至少知道它在那里,在你将编写的所有东西的基础上。

2

除非您需要某些不在.NET Framework中的功能(例如获取打印机驱动程序的详细信息),否则不会。这大约是你将要做的99%(当然,这是我刚刚制作的一个任意值)。

即使您使用Win32而不是.NET,是否真的需要学习与本书相同的深度?浏览部分,了解如果您将来遇到某些问题,则知道该在哪里寻找它。然后停下来。当你需要它或有空闲时间时深入研究。

0

您必须知道它存在,因为大部分“高级”托管语言的本地函数最终会调用它们。

加上它可以在脚本语言封装像AutoitDllCall

4

我真的不认为“学习的Win32 API”是任何人都现实。这些API(是的,不止一个)是巨大的,你几乎不需要详细了解它们。我建议阅读一些基础知识(例如,窗口创建,窗口消息,窗口过程,可能是某些GDI等),并使用MSDN在需要时查找其余部分。

4

绝对要学AlexDrenea提到的基础知识。虽然.NET可以避免许多Win32 API调用。 Win32 API非常庞大,你一定会遇到.NET没有为你包装它的情况。

现实生活中常见的情况sort arrows on ListViewColumns

3

按格雷格的评论,这是依赖一定程度上域。我做了很多Windows CE /移动编程,其中.NET对于许多设备而言过于霸道,而其他框架(如MFC)没有完全实现。在这种情况下,Win32的大部分仍然非常相关。这就是说,我不会先学习它,我只是通过基础知识,并在需要时挖掘其余部分。这些文档和示例对于这种方法来说已经足够了,就像这样的社区提供的在线帮助一样。

12

如果您在Windows上编写C#,这非常相关。并非Win32的所有功能都通过.Net库公开。一个具体的例子是我在这里描述的WM_SETREDRAW消息技术:WM_SETREDRAW。在其他时候也需要控制焦点问题。

而且,理解的Win32和Windows的工作将如何给你一个更好的了解C#的各个方面/网等为:

  • 是什么Control.Invoke()实际上呢?
  • Control.BeginInvoke和Control.Invoke之间的区别是什么?
  • 真正导致我的控件事件触发的原因OnClick等,我如何调试。

也就是说,WPF改变了所有这一切,如果你只写.Net 3/3.5代码,那么我的论点就失去了一些相关性。

1

我认为它已经被回答了,但是如果你在.NET中进行.NET 2.0开发或者任何winform,你肯定会遇到很多问题,关于框架的某些部分如何包装win32和mfc以及你我们需要深入研究,以实现按预期工作的东西。

0

这已讨论了专业Win32 API的新闻组多次( 消息://comp.os.ms-windows.programmer.win32)

(由最大的大师和畅销书作家(彼佐尔德, Russinovich等)在世界上......)

2

如果你想解决商业问题,那么比编程Win32系统有更好的工具。号角。德尔福。其他人我毫不怀疑。

但我想学习如何工作你在好代替与C

8

我觉得学习的基础知识是非常重要的。如果你学到的东西足够显示一个带有一些字段,一些按钮和一个菜单的窗口。也许在一个单独的窗口中画一些东西它可以帮助您了解Windows如何真正工作的基础知识。我相信理解消息循环和认识到几乎所有你看到的都是一个窗口是每个人都应该知道的基本事情。我第一次意识到按钮是它自己的窗口时,我的眼睛真的被打开了。然后通过发送这些窗口消息,它可以帮助您了解事物的功能可以打开和关闭。 Subclassing窗口让你可以访问.NET或VB Classic等功能中未公开的功能,让你增强窗口的功能。

1

我仍然在使用它赚钱的一部分。我们有一个基于WinAPI的C IDE。现在已经有15年左右的时间了,而且还在运行;-)。它的完整下载大约是5 MB,因为你在.NET世界中没有任何东西。所以对我们来说这仍然是一件有价值的事情......