Win32编程与现代专业人士的相关性如何?

时间:2009-02-03 08:50:13

标签: c winapi

作为Charles Petzold的书籍 Code The Annotated Turing 的忠实粉丝,我看到了他的书 Programming Windows ,它在C语言中教授Win32编程我是第一个学习C的新生计算机科学专业的学生,​​但我现在使用C#和.NET进行Windows编程,所以我想知道Win32是否仍然与专业的Windows程序相关。作为一名想要编写Windows应用程序的学生,我是否值得学习Win32 API到本书所涵盖的深度?

15 个答案:

答案 0 :(得分:31)

这实际上取决于您要开发的应用程序类型。目前,在大多数情况下,C#和.NET都是完全合适的。但是,某些类型的应用程序需要尽可能少的依赖项(想到shell扩展),这些应用程序不像.NET应用程序那样可行。对于那些你需要Win32。

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

答案 1 :(得分:30)

我完全同意乔尔·斯波尔斯基在他众多伟大的articles中所写的内容。我认为知道机器的较低层不仅能够编写高质量的代码,而且能够解决不可避免会出现的问题,这一点至关重要。

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

答案 2 :(得分:13)

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

此外,了解Win32和Windows如何工作将使您更好地了解C#/ .Net的各个方面,例如:

  • Control.Invoke()实际上做了什么?
  • Control.BeginInvoke和Control.Invoke之间有什么区别?
  • 实际导致我的控制事件发生的原因,例如: OnClick等,我该如何调试呢。

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

答案 3 :(得分:12)

在我看来,没有。我很久以前就学会了,所以你不必这样做!

我认为你首先学习C很好,我会不时地编写C程序,但我不明白为什么win32 API对于挖掘是有用的。老实说,这是一个很大的混乱。

答案 4 :(得分:8)

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

答案 5 :(得分:4)

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

答案 6 :(得分:4)

绝对学习AlexDrenea提到的基础知识。虽然.NET可以保护您免受许多Win32 API调用的影响。 Win32 API是如此巨大,你必然会遇到.NET没有为你包装它的情况。

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

答案 7 :(得分:3)

根据Greg的评论,它在某种程度上取决于域名。我做了很多Windows CE /移动编程,其中.NET对许多设备来说过于苛刻,而其他框架(如MFC)并没有完全实现。在这种情况下,Win32的大部分仍然非常相关。

那就是说,我不会事先学习它,我只是简单地完成基础知识,并在我需要的时候挖掘剩下的部分。这方面的文档和示例对于这种方法来说已经足够了,就像这样的社区提供的在线帮助一样。

答案 8 :(得分:2)

除非您需要.NET Framework中没有的某些功能(例如获取有关打印机驱动程序的详细信息),否则不行。你所做的事情大概是99%(当然,我刚刚编造的任意值)。

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

答案 9 :(得分:2)

如果您正在尝试解决业务问题,那么有比C更好的工具来编程Win32系统。号角。德尔福。还有其他我毫不怀疑。

但是我想要学习如何运作你很好地使用C语言。

答案 10 :(得分:1)

我认为它已经得到了回答,但是如果你在.NET中进行.NET 2.0开发或任何改进,你必然遇到很多问题,框架的某些部分是如何包装win32和mfc而你的'我需要深入研究,以确保按预期工作。

答案 11 :(得分:1)

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

答案 12 :(得分:0)

如果没有win api调用,有些东西是无法完成的,但是每个版本的.net都会变得越来越少,所以如果我在哪里,我就不会学习win api ..

答案 13 :(得分:0)

你必须知道它存在,因为更多“高级”托管语言的大部分原生功能最终会调用它们。

另外,它可以封装在脚本语言中,例如AutoitDllCall

答案 14 :(得分:0)

这已在Professional Win32 api Newsgroup上多次讨论过( 消息://comp.os.ms-windows.programmer.win32)

(由世界上最伟大的大师和畅销书作者(Petzold,Russinovich等)...)