我想了解在使用特定語言定義函數/結構字段的參數時使用Windows數據類型的目的。我已閱讀說明,詳細說明如何防止代碼在「底層類型」發生更改時「破壞」。有人可以提供一個簡明的解釋和例子來澄清?謝謝。在程序中使用Windows數據類型的目的
0
A
回答
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
相關問題
- 1. 在引用的程序集中使用webservice數據類型
- 2. Windows Phone應用程序項目類型在VS2010中不可用
- 3. 在C程序中使用適當的數據類型
- 4. 類型在Windows應用程序項目中不受支持
- 5. Windows應用程序數據目錄
- 6. 在Windows窗體應用程序中使用ASP.NET MVC模型類
- 7. 在Android應用程序的數據庫中更改列類型
- 8. 如何在windows應用程序中使用VB.NET項目中的C#類?
- 9. 類型'System.Object'在未引用的程序集中定義 - Windows Store應用程序
- 10. 我應該在我的程序中使用什麼樣的數據類型
- 11. 參數在MySQL程序中的類型?
- 12. Windows窗體應用程序 - 我應該使用哪種數據庫類型?
- 13. Windows編程和數據類型
- 14. 在JTable中使用setAutoCreateRowSorter排序不同的數據類型
- 15. 在VSTS2008中推薦數據庫類型項目的教程?
- 16. C中使用的數據類型
- 17. 在Haskell的數據類型使用Data.Array
- 18. 在Windows Phone 7應用程序中使用數據庫
- 19. 在C#.Net中使用WSO2數據服務Windows應用程序
- 20. 在Windows應用程序中使用數據庫
- 21. 在Windows 8中使用共享數據庫應用程序
- 22. 在泛型中使用Java中的抽象數據類型
- 23. .net應用程序中的不同數據庫類型
- 24. 金融應用程序中必需的貨幣數據類型?
- 25. 在VB.Net項目中使用強類型數據集
- 26. 在Haskell中使用數據類型
- 27. 在MySQL中使用`set`數據類型
- 28. 在angular2中使用ngSwitch數據類型
- 29. 在SQL中使用BLOB數據類型
- 30. 使用Sequelize和數據類型的數據類型
如果您正在編寫Windows程序並調用Windows API函數,那麼它們將使用Windows數據類型作爲參數並返回值等。使用Windows數據類型有助於確保在與接口連接時使用正確的參數/返回類型Windows API方法,函數,類等 – lurker
在調用Windows API函數時甚至可能不使用Windows數據類型?例如,如果我使用Python進行編程,理論上我可以將Pythons數據類型傳遞給Windows API函數調用嗎? 你能澄清你的意思是「正確的參數/返回類型」嗎?什麼是不正確的參數/返回類型?謝謝 – Info5ek
是的,你可以,如果你追查你所感興趣的WDT代表什麼原生類型。 – lurker