[英]When using the Win32 API, which data types to use?
標准數據類型還是Windows數據類型?
我將使用Windows數據類型使我的代碼與Win32 API一致。
另一方面,我將使用標准數據類型來防止編碼錯誤。
使用標准數據類型似乎更安全,但也感覺像是全黑的“穿白色衣服”聚會。
在這里應該決定什么?
這在很大程度上取決於您正在處理的項目。 嘗試遵循已經建立的編碼樣式。
我最喜歡的做事方式:
void*
, char*
等),當我調用它們時,我也使用此類型。 LPVOID
, LPTSTR
,...),要么從我的一個函數(具有“正常”數據類型)獲取變量。 ,但需要轉到Win32 API調用,我專門將類型轉換為所需的類型。 有時這也有助於查看我是否有一些沖突的類型。 嗯-我認為winapi的穩定性很好。 你有例子嗎?
但對您的問題:
我建議為您自己的東西使用stdint類型, 但是當與winAPI接口時,請使用它們的類型並相互之間進行轉換,以避免有關類型寬度和混淆的麻煩,例如WORD的意思。
Windows vs C ++類型是與Unicode安全完全正交的問題。
如果您具有std::string s
,則可以很好地進行const_cast<LPSTR>(s.c_str())
而不犧牲以Unicode編譯時的編譯器錯誤。
我同意@fritzone作為實用的解決方案。 我的略有不同。
我非常希望包裝外部API。 我將編寫一個代碼層,在其中使用WinApi,並始終在該層中使用Windows類型。 這將是包含Windows.h的應用程序的唯一部分。 調用這些層函數的API將使用我選擇的類型,並且(對於@fritzone)我將根據需要將值顯式轉換為WIndows類型。 每個演員表都是一個等待發生的錯誤。
分層的另一個好處是,它是放置跟蹤代碼的好地方。 WinApi可能非常健談,並且很難在調試器中逐步調試,因此我喜歡為每個WinApi函數提供跟蹤代碼,可以在需要時打開它們。
使用MFC或ATL變得越來越普遍,這很難做到。 對於各種不同的外部API,這一直是我的偏愛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.