2013-08-02 24 views
0

我想了解在使用特定語言定義函數/結構字段的參數時使用Windows數據類型的目的。我已閱讀說明,詳細說明如何防止代碼在「底層類型」發生更改時「破壞」。有人可以提供一個簡明的解釋和例子來澄清?謝謝。在程序中使用Windows數據類型的目的

+0

如果您正在編寫Windows程序並調用Windows API函數,那麼它們將使用Windows數據類型作爲參數並返回值等。使用Windows數據類型有助於確保在與接口連接時使用正確的參數/返回類型Windows API方法,函數,類等 – lurker

+0

在調用Windows API函數時甚至可能不使用Windows數據類型?例如,如果我使用Python進行編程,理論上我可以將Pythons數據類型傳遞給Windows API函數調用嗎? 你能澄清你的意思是「正確的參數/返回類型」嗎?什麼是不正確的參數/返回類型?謝謝 – Info5ek

+0

是的,你可以,如果你追查你所感興趣的WDT代表什麼原生類型。 – lurker

回答

0
在一個類似的帖子( Why are the standard datatypes not used in Win32 API?

找到答案:

而且這些類型的定義會是這樣的,而不是使用整型,字符等的原因是,它消除了「無論編譯器認爲一個int的大小應該是「來自OS的界面。這是一件非常好的事情,因爲如果你使用編譯器A,編譯器B或編譯器C,它們都將使用相同的類型 - 只有庫接口頭文件需要做正確的類型定義。

例如,通過定義非標準類型的類型,很容易將int從16更改爲32位。 Windows的第一個C/C++編譯器使用16位整數。只是在20世紀90年代中後期,Windows獲得了一個32位的API,直到那時,你使用的是16位的int。想象一下,你有一個運行良好的程序,使用幾百個int變量,突然之間,你必須將所有這些變量改爲別的東西......不會很好,對 - 特別是其中的一些變量不需要改變,因爲對於你的一些代碼移動到32位int不會有什麼區別,所以在改變這些位時沒有意義。

需要注意的是,WCHAR與const char不同 - WCHAR是一個「寬字符」,所以wchar_t是可比類型。因此,基本上,「定義我們自己的類型」是一種保證可以更改底層編譯器體系結構而不必更改(大部分)源代碼的方法。所有執行機器相關編碼的大型項目都會這樣做。

+0

還有一個問題:如果Windows數據類型本身由微軟改變,這不會導致完全相同的問題,必須回顧並改變數百個編譯器特定的變量? – Info5ek

相關問題