它是有意义的,具有所有的C#-管理-的幸福,回到Petzold的窗户和试图产生的代码w/纯WinAPI?

什么都可以从中学到了什么?不是它只是太过期待有用吗?

有帮助吗?

解决方案

这个问题是接壤的宗教:)但我会给你我的想法无论如何。

我看到的价值,在学习的Win32API。大多数情况下,如果不是所有的,GUI库(管理或管理)的结果在叫到Win32API。即使是最彻底的图书馆不复盖100%的API,并因此总是有差距而需要插通过直接API calls或P/调用.一些名称,包装API calls有类似的名称为基础API呼吁,但这些名称并不是完全自记录。因此理解的基础API,其中使用的术语,将有助于了解包装Api什么,他们实际上做的。

另外,如果你了解的性质的基础Api使用的框架,然后你会做出更好的选择对其图书馆的功能应该使用在一定的情况。

干杯!

其他提示

我保持的标准C/C++多年前的学习Win32API,并且是相当钝,"学习Win32API"的一部分不是最好的技术经验的我的生活。

在一方面Win32API是相当凉爽。它就像一个扩大的C的标准API(谁需要 fopen 当你可以拥有 CreateFile.但我猜UNIX/Linux/WhateverOS有相同的小玩意儿的功能。无论如何,在Unix/Linux,他们有"一切都一文件"。在窗户,他们具有"一切都是一个...窗口"(没有开玩笑!看看 CreateWindow!).

在另一方面,这是一个传统。你将处理原C和原C疯狂。

  • 像告诉一个人的结构自己尺寸的穿过 void * 指针一些Win32功能。
  • 消息可以是相当令人困惑,也:混C++对象Win32windows导致非常有趣的实例 鸡或蛋 问题(有趣的时刻当你写的一样 delete this ; 在一个类方法)。
  • 有一个子类WinProc当你在比较熟悉对象的继承头的分裂和不到最佳的。
  • 当然,还有就是喜悦"为什么在这种开采的世界他们做这件事情这样吗?"时刻,当你打键盘带你的头一次太多,并得到回家的钥匙刻在你的额头,只是因为有人认为这更符合逻辑写一API使改变颜色的一个"窗口",而不是通过改变一个其特性,但要求它以其母窗口。
  • 等等。

在最后的手(的三只手???),考虑,有些人的工作与传统的Api本身就是使用传统码型。当你听到"const 是傻瓜"或者"我不使用名字空间,因为它们降低运行时速"或甚至更好的"嘿,谁需要C++?我的代码在我自己的品牌面向对象的C!!!"(没有开玩笑...在专业环境,结果是相当一视...),你会感觉到的那种恐惧仅仅谴责,感到前面 断头台.

所以...所有的一切,它是一个 有趣的 经验。

编辑

在重新阅读这篇文章中,我看到它可以被看作是过于消极。它不是。

它有时是有趣(以及令人沮丧)知道如何工作的引擎盖下。你就会明白,尽管有巨大的(不可能的吗?) 约束,Win32API团队所做的出色工作,以确保一切,从你的"奥尔德Win16程序"你的"最后Win64上应用程序",可以一起工作,在过去、现在和未来。

问题是:你真的想到?

因为花几周的时间来做的事情,可以(而且做得更好)在其他更高级别和/或面向对象的API可能相当de-激励(真实生活经验:3周赢API,对4小时,在其他三种语言和/或库)。

无论如何,你会找到雷蒙德*陈的博客很有趣,因为他内幕的视两赢API及其演变过年:

https://blogs.msdn.microsoft.com/oldnewthing/

绝对的。当没人知道的低水平,他们会更新和编写高级别的语言?此外,当您了解低层的东西,你可以写的更有效的代码的更高水平的语言,并且也调试,效率更高。

本机APIs是"真正的"操作系统Api。。净库(与少数例外情况外)没有什么比一个奇特的包围他们。所以,是的,我想说的是,任何人可以理解的。净额与所有其复杂性,可以了解比较平凡的事情像是在说API没有好处的一个中间的人。

只是尝试做DLL注从管理的代码。它不能这样做。你将被迫写的母代码,用于开窗口的调整,为真正的继承和十几个其他的东西。

所以是:你应该(必须)知道这两者。

编辑:即使你计划使用的P/调用。

在假设你在建设有针对性的应用程序,在Windows:

  • 它可以肯定的是信息以了解水平较低的系统-他们是如何工作的,你的代码是如何与他们(即使只是间接),并在那里您有另外的选项,不可在高级别抽象
  • 有些时候你的代码,不可能为高效率、高性能或不够精确,对你的要求
  • 然而,在更多的情况下,人像我们一样(谁从来没有学会"非托管编")将是以拉脱编程,我们正在试图做的没有"学习"Win32.
  • 另外,还有大量网站提供工作的样本,代码碎片和甚至完全功能源代码,你可以的"杠杆"(借款,抄袭-但是检查是否遵守任何重新使用的许可证或版权的!) 以填补任何差距,并不是处理通过。净框架类库(或图书馆,你可以下载或许可证).
  • 如果你可以脱掉你的壮举需要,而不是瞎搞在Win32,你正在做一个好工作的发展形成良好、可读性管理的代码,然后我会说掌握。网将是一个更好的选择,而不是扩展自己的薄在两个非常不同的环境。
  • 如果你经常需要利用这些功能的窗户,没有收到了良好的框架类图书馆的复盖范围,然后通过各种手段,学习技能的需要。
  • 我亲自花了太多时间在担心"其他区域"的编码我 应该 了解到产生"良好计划",但没有充足的受虐狂,认为每个人的需要和愿望,正像他们自己。痛苦的爱公司。:)

在假设你在建筑应用程序为"Web2.0"的世界,或者说,将只是作为有用的/有利于*NIX&mac os用户:

  • 坚持语言和编译器的目标,因为许多跨平台的环境中成为可能。
  • 纯粹的。净在Visual Studio是更好的比Win32很明显,但发展中针对单一图书馆,也许使用的急剧发展IDE,可能是一个更好的办法。
  • 你也可以花时间学习Java,并且这些技能将转移非常好C#编程(加Java码将从理论上在任何平台上运行的匹配java运行环境).我听说这是更喜欢"编写一次,"调试"到处",但这可能是真实(或甚至用户比)。

比喻:如果你制造汽车的生活(编),那么其非常相关的知道如何发动机的工作(Win32).

简单的回答,是的。

这是回答任何问题,就像是.. "它是有意义的了解低级语言/api X甚至在较高水平的语言/api Y是有"

是的

你能够启动了你的窗户PC(或任何其他操作系统),并问这个问题,因为几个人在微软写了16位的大会代码负载操作系统。

你浏览器工作,因为有人写了一个操作系统核心在C,提供所有浏览器的要求。

它去到脚本语言。

或大或小,总是有一个市场和机会写的东西在任何级别的抽象概念。你只需要像它并适合在合适的工作。

没有api/语言在任何级别的抽象irrelevent 除非有一个更好的相互竞争的水平相同.

另一种方式来看待它:一个很好的例子之一迈克尔*阿卜拉什的书:C编程人员被赋予的任务编写的功能清晰的画面。C由于是一个更好的(高级别)的抽象在大会和所有,程序只知道C知道它很好。他做他最好的-他搬标向每个在屏幕上的位置,并清除了字。他优化循环并确保它跑那么快,因为它可能。但它仍然是缓慢的...直到一些人来说有一些BIOS/显的指令或东西,可以清晰的画面。

它总是有助于知道你是什么走。

是的,出于几个原因:

1).净包Win32代码。.网通常一个高级系统代码的反对,但有一些知识的基础Win32层(哎呀,WinAPI现在,有64位代码)支持你的知识什么是真正发生的事情。

2)在这种经济中,最好是有一些优势的其他家伙的时候你正在寻找工作。一些WinAPI的经验可以提供这个给你。

3)某些系统方面不提供通过。净框架,如果要访问的那些特征将需要使用p/调用(见 http://www.pinvoke.net 一些帮助那里)。至少具有零星的WinAPI经验将使你的p/调发展努力更多有效。

4)(加入)现在,Win8了一段时间, 仍然 建立在WinAPI.iOS,机器人,OS/X和Linux是所有的东西都倒出来了,但WinAPI仍然会有很多很多年。

学习一门新的语言编程或技术被用于三个原因:
1.需要:你开始的一个项目建立一个网络应用程序和你什么都不知道ASP.NET
2.热情:你很兴奋ASP.NET 视.为什么不试试?
3.免费的时间:但是谁,无论如何。

的最好理由要学习新的东西是需要的。如果你需要做的事情。净框架不能这样做(如性能,例如)然后WinAPI是你的解决方案。直到然后我们让我们自己忙着学习。净

对于大多数需要在桌面上的你不会需要知道的Win32,但是有很多的Win32不在。净,但是在本土外的东西,最终可能被少于1%的应用程序。

USB支持,藏的支持,窗媒体基金会就在我的头顶。有许多很酷的Vista API只可从Win32.

你会做你自己一个大有利于通过学习如何做到互操作与Win32API,如果你做的桌面程序,因为当你做的时候需要调Win32,你会,你不会花一个星期挠你的头上。

我个人不太喜欢Win32API但是有价值的学习它作为API将允许更多的控制和效率使用GUI于语言的Visual Basic,我认为,如果你要做一个活生生的写作软件,你应该知道的API甚至如果你不用它的。这是因类似的原因,这是很好的学习C,像怎么一个本需要更多的时间用于复制整数,或者为什么你应该使用指数组作为功能的参数,而不是数组通过价值。

学习C或低级的语言,可以肯定是有用的。然而,我看不到任何明显的优势在使用不受管WinAPI.

我已经看到的低水平Windows API的代码...这不是很...我希望我能忘掉它。我认为,它有益于学习水平低,作为在C,你获得一个更好的理解的硬件结构和如何使所有这些东西的工作。学习古老的Windows API...我觉得那东西可能被留下来的人在微软谁可能需要了解它建立更高级别的语言和API...他们建造它让他们遭受与它;-)

但是,如果发生找到一个情况下你觉得你就不能做你需要做的是在更高级别的语言(少数和之间),那么或许开始的危险潜入那个世界。

是的。看一看全,一个惊人的软件效率。它的一半的小尺寸是由于这样的事实,它的核心成分被重新编写,以便不使用gargatuian库。

这不可能不理解如何将这些图书馆的接口,与低级API的

重要的是要知道什么是提供的窗口。我不认为你需要的曲柄出来码与它,但是你应该知道它是如何工作的。。净框架包含了很多的功能,但它没有提供托管的代码等同于整个窗口。有时候你必须得到近一点的金属,并且知道什么是向下在那里和如何,它的行为会给你一个更好地了解如何使用它。

这真的是相同的问题,我应该了解一个低级的语言,比如C(或甚至汇编).

编码在这当然是慢(虽然结果是要快得多),但其真正的优势是你了解到什么是发生在靠近该系统级别,而不是不仅仅是理解别人的隐喻是怎么回事。

它也可以是更好的东西时不工作,或足够快速的或排序的粒度。(并且至少做一些子类和创建超.)

我把它放这种方式。我不喜欢编程的Win32API。它可以是一种痛苦相比,管理编码。但是,我很高兴我知道这是因为我可以编写程序,否则我就不可以。我可以编写程序,其他人不能。再加上它可以让你更深入地了解什么你的托管的代码这样做。

量的值得出的学习Win32API,(除了各种各样的一般的见解,你得学习关于如何螺母和螺栓的机合在一起)取决于什么你要试图来实现。很多Win32API已包装好的。净类库,但不是所有的。举例来说如果你想要做一些严重的音频节目,部分Win32API会是一个优秀的研究课题,因为只有最基本的作业都是可用的。网课程。上次我检查,甚至管理安装DirectSound库是可怕的。


在风险的无耻的自我促进。...

我只是遇到了一个情况Win32API是我唯一的选择。我想要有不同的提示,每个项目的一个列表框。我写了我是如何做上 这个问题.

甚至在非常非常高的水平语言,你仍然使用API。为什么?好吧不是每个方面的API已经被复制各种图书馆,框架,等等。你需要学习API,只要你需要API完成什么你想做的。(并且没有更长的时间。)

除了一些非常特殊的情况下,当你需要直接访问Api,我说没有。

有相当多的时间和努力需要学习实施母API调正确和返回的价值是不值得的。我宁愿花时间学习了一些新的热技术或框架,这将使你的生活更容易并编程减少痛苦。没有数十年之久的陈旧的COM库,没有人真正使用了(对不起COM用户)。

请不要石我的这一观点。我知道很多工程师在这里真的好奇灵魂有什么不对学习的东西是如何工作的。好奇是好,真的帮助了解。但是从管理的角度来看,我想花一个星期学习如何制定安卓应用于如何叫奥莱希或COMs.

如果你计划开发一个交叉平台应用程序,如果使用win32,那么你的应用程序可以很容易地运行在linux上通过的葡萄酒。这导致一个高度可维护应用程序。这是一个优势的学习win32.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top