2012-05-11 23 views
1

最近我一直在做一些Winsock編程。我在Windows SDK中做的不多。我還沒有建立一個真正的Win32應用程序,因爲我年輕時並沒有考慮到它,但現在我看看一些已定義的類型,它們簡單地圍繞着其他類型的平臺不可知論者,我想知道爲什麼有人會在他們不需要時使用它們。我沒有看到使用PSTR或DWORD在那裏的本地計數器部件的優勢。在Winsock Reference 有一個頁面列出所有已定義的structs and typedefs。他們將所有結構都輸入爲大寫字母,我不明白在設計Windows SDK的決定是將所有類型輸入爲像這樣的大寫字母時試圖完成的整體策略。爲什麼使用Windows定義的數據類型?

我不明白爲什麼任何人,即使在Windows中編寫代碼時都會使用大寫的版本,如果他們沒有的話,僅僅是因爲它看起來會讓代碼更難在未來需要的端口移植。我可以的時候總是使用原生類型和原始Winsock結構。我試圖做一些搜索這個問題的答案,但也許我想不出如何正確地使用一個查詢。我缺少這個優點嗎?任何人都可以爲我闡明這一點嗎?

+1

有很多代碼從16位移植到32位到64位Windows,只需要很少的更改。因爲它依賴於這些typedefs。 –

回答

2

優點是,Windows SDK中的typedef將根據需要進行調整。近期歷史中可能最好的例子是DWORD_PTR,在使用得當的時候,它在x64版本中的表現是正確的,而你必須經歷一些環節才能使它與你所謂的「本地類型」(即來自語言標準)。

還要記住,一些Winsock函數與原始BSD套接字函數不完全對應。因此,將事情人爲分開是有道理的,無論是出於遺留原因還是簡潔。

對於某些未在語言標準中定義的Win32類型,可以這樣說,因爲它們根據您的內部版本進行調整,如LPTSTR

最後但並非最不重要,如果你曾經從事跨平臺的編程,並且不能依賴於從stdint.h因各種原因(全部或部分)的類型,你會明白的類型,如DWORD,因爲這意味着一定的寬度,每當與某個接口(API)交談時都是相關的。

+0

DWORD_PTR是最差的例子。它遲到了。 –

+0

@Hans:那你爲什麼不給一個更好的呢?這也是我回答「在最近的歷史」中的原因:) – 0xC0000022L

相關問題