[英]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.