标准数据类型或Windows数据类型?
我会使用Windows数据类型来使我的代码与Win32 API保持一致。
另一方面,我会使用标准数据类型来防止编码错误。
使用标准数据类型似乎更安全,但也感觉像是穿着白色'全黑的派对。
这里应该做些什么?
答案 0 :(得分:2)
这在很大程度上取决于您正在进行的项目。尝试遵循已经建立的编码风格。
我最喜欢的做事方式:
void*
,char*
等...),当我调用它们时,我也使用它。LPVOID
,LPTSTR
,...)或者如果我从其中一个获取变量我的函数(具有"普通"数据类型),但需要转到Win32 API调用,我特别强制转换为所需的类型。有时这也有助于查看我是否有一些冲突的类型。答案 1 :(得分:1)
但问题是:
我建议使用stdint类型为你自己的东西但是当与winAPI接口时使用它们的类型并转换为它们以避免类型宽度和混淆的困难,例如WORD的意思。
答案 2 :(得分:1)
Windows与C ++类型是Unicode安全性的完全正交问题。
如果你有std::string s
,那么在编译为Unicode时,你可以做const_cast<LPSTR>(s.c_str())
而不会牺牲编译器错误。
答案 3 :(得分:0)
我同意@fritzone是一个实用的解决方案。我的情况略有不同。
我非常喜欢包装外部API。我将编写一个使用WinApi的代码层,并始终在该层中使用Windows类型。这将是包含Windows.h的应用程序的唯一部分。对这些图层函数的API调用将使用我选择的类型(对于@fritzone)我将根据需要显式地将值转换为WIndows类型。每个演员都是等待发生的错误。
分层的另一个优点是它是放置跟踪代码的好地方。 WinApi可能非常繁琐且难以在调试器中单步执行,因此我希望为每个WinApi函数提供跟踪代码,如果需要可以打开它。
使用MFC或ATL更难做到,而MFC或ATL往往变得相当普遍。这是我对各种不同外部API的偏爱。