2009-02-03 22 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世界中沒有任何東西。所以對我們來說這仍然是一件有價值的事情......