关于winapi:值得学习win32 API吗?

您所在的位置:网站首页 win32api编程比mfc慢多少 关于winapi:值得学习win32 API吗?

关于winapi:值得学习win32 API吗?

2023-07-12 23:29| 来源: 网络整理| 查看: 265

我确定有人会特别问这个问题,但据我所知,没有人问过(关于学习win32的问题,但这并没有涵盖是否值得这样做)。

我对深入了解我使用的所有系统非常感兴趣(我主要使用C#编程,至少是专业的),所以我很想知道-学习win32是否值得,还是过度杀伤力? 我在浪费时间吗? 我所获得的知识值得付出努力吗?

关于StackOverflow的类似/相关问题:

学习低级WinAPI编程仍然有意义吗? Win32编程与现代专业人员之间的相关性如何?

如果您打算将来进行Windows开发,那么具有Win32最低工作原理的工作知识无疑将是无价的。它使您对Windows,Messaging和GDI之类的东西有深入的了解,而这些东西在到达.NET时就被隐藏了。

我不建议您尝试使用Win32编写所有应用程序,但是我认为任何Windows开发人员都将从使用C / C ++编写简单的Win32应用程序中受益。

对于WPF等对Win32的依赖性较小的事情而言,情况并非如此,但是仅了解Win32的工作原理将有助于您理解或欣赏WPF中的某些设计决策。

相关讨论 当然可以,当然Id仅在必要时才有兴趣使用它。 @安德鲁·格兰特(Andrew Grant):我完全同意-由于.NET库的大部分内容都是基于Win32的,所以当我记得在很多情况下,它们只是包装底层的Win32 API时,我常常会更快地了解它们的设计选择。

如果满足以下所有条件,我主张学习底层Windows编程的概念。

您将要进行任何Windows编程。 当无法解释的事情发生时,您想成为"去"的家伙。 你喜欢学习。

诸如.NET的抽象层可以创建并允许开发人员在无需了解很多知识的情况下完成不可思议的事情。但是,当.NET以其作者未曾预料到的方式显示其细微的错误之一时,那正是一些Win32 API知识走得很远的时候。

您是否需要编写消息泵?我对此表示怀疑。它可以帮助诊断问题吗?完全正确!

相关讨论 确实。知道您将一级(或二级)级别降低是非常方便的,因为抽象会泄漏。 在大约6年后的今天,我们将Windows运行时/通用Windows平台作为.NET的指定后继产品。 Windows API的原生(即C和C ++)包装器。了解Windows API是否有帮助?比以往更! 我喜欢你的回答...

问题很像,"学习汇编值得吗?"答案是一样的:

"是的,因为您将了解基本知识,并且比只在最高抽象级别工作的人更能感知。"

但是,出于同样的原因,您可能不会在99.5%的时间内直接编写Win32 API。

当他们发明C代替汇编语言时,人们可能会问:"学习汇编语言值得吗?"知道两者的价值在于能够将其组装到C中去完成不可能完成的事情(例如触发中断)。

对于Win32也可以这样说。有些事情在C#中是不可能完成的。如果您不知道win32 api,那么您会认为有些事情是不可能的。但是,一旦知道丢失的内容,在那些罕见的情况下,您就可以"丢到win32"并执行它们。

另一种看待它的方式是:编程就是能够同时思考多个抽象级别。例如,如果您知道您的语言使用不可变的字符串,则无需编写将单个字符添加到一个10000次的算法,因为这样做会很慢。如果您知道win32 api,则可以考虑如何实际实现用C#编写的每一行,这将有助于您编写更好的代码。

相关讨论 并且在有了可用的参考源的情况下,了解Windows API对理解某些实现的含义非常有帮助。如果您知道,您将不可避免地做出更好的决定。

至少对我来说,学习我不使用的API(我认为这是"深入"的意思)是浪费时间。我宁愿花费有限的时间和脑力来学习新概念或探索新工具,而不是完全熟悉我现在不需要使用的现有工具。当我需要一个我没有或必须使用的工具时,现在是时候深入学习它了。在此之前,我可能会做足够的调查,以了解它是否对我有用,但仅此而已。

是的,您应该学习Windows运行方式的基础知识(其中很多东西早于Win32)。为什么?出于同样的原因,即使我自己不做家具,我也了解榫眼榫的工作方式,或者即使我自己不进行汽车保养,我也理解内燃机的工作原理。

您可以在更高的抽象层次上工作,这很好,但是当抽象泄漏(不是" if",而是"时间")时,如果您不了解Windows的基础知识,就会迷路。如果您至少不了解某些API,那么您将不需要知道在哪里需要P.Invoke功能。

除此之外,好奇心还不够吗?

是的,学习Win32 API的原理非常有用-这些原理是构建其他所有东西的基础。

用于GUI开发的.NET API(Windows.Forms和WPF)在Win32 API之上可能的限制内完成了它们的工作。这些框架的关键体系结构决策受Win32 API约束和告知。

另一方面,由于有很多东西要学习,因此您不大可能从深入研究API中获得很多价值,而且由于您将大部分时间都花在使用C#上,因此您拥有更少的机会来学习。直接使用知识。

顺便说一句,这同样适用于其他技术,例如网络,加密和硬件设计。学习基础知识将帮助您成为更好的开发人员。

如果您尝试编写VB6应用程序,则Win32 API允许您执行VB6本机不支持的许多操作。

如果您正在编写C#WinForms应用程序,那么我建议您首先学习.NET Framework的广泛知识。

编辑

如果您真的想知道Windows幕后的情况,那么您可能想看看Charles Petzold编写的《 Programming Windows 3.1》的副本。

相关讨论 我已经对WinForms有了相当不错的知识(考虑到.net框架的所有方面都非常庞大),但是那当然是一个泄漏性的抽象,而且我对库的引擎盖下的工作没有真正的了解。 ... 抽象-是的,但也称为更一致和可用的API。漏...我希望不会!

我不会重复别人已经说过的很多遍了。

这是指向Win32教程的



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3