Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Windows编程和数据类型_C++_Windows_Api_Types - Fatal编程技术网

C++ Windows编程和数据类型

C++ Windows编程和数据类型,c++,windows,api,types,C++,Windows,Api,Types,我目前正在从事一个Windows应用程序项目。 我正在用WindowsAPI开发它,我需要设置一些标准 重要的一点是: 我应该使用Windows数据类型(DWORD、TCHAR、LPSTR…)还是标准数据类型 我应该在代码中的任何地方使用它们,还是只在代码的某些部分使用它们 多谢各位 编辑: 你觉得萨尔怎么样? 我应该在头文件中使用它吗?对于直接转到windows API的值,请使用windows类型。对于仅用于自己内部计算的值,请使用自己的类型(或类似stdint.h的类型)。对于两者都使用

我目前正在从事一个Windows应用程序项目。 我正在用WindowsAPI开发它,我需要设置一些标准

重要的一点是:

  • 我应该使用Windows数据类型(DWORD、TCHAR、LPSTR…)还是标准数据类型
  • 我应该在代码中的任何地方使用它们,还是只在代码的某些部分使用它们
  • 多谢各位

    编辑: 你觉得萨尔怎么样?


    我应该在头文件中使用它吗?

    对于直接转到windows API的值,请使用windows类型。对于仅用于自己内部计算的值,请使用自己的类型(或类似stdint.h的类型)。对于两者都使用的值,请使用您自己的类型,并在需要时转换为windows类型。

    对于直接转到windows API的值,请使用windows类型。对于仅用于自己内部计算的值,请使用自己的类型(或类似stdint.h的类型)。对于两者都使用的值,请使用您自己的类型,并在需要时转换为windows类型。

    这个问题的一部分只是观点,但我的建议是:

    我会同意像DWORD这样的事情。您不应该为Windows数据类型假定特定的基础类型。您应该只假设如果函数说它需要一个
    DWORD
    ,那么您需要为它提供一个
    DWORD
    。它确保了如果Microsoft更改了底层类型,那么您的代码仍然可以正常工作,而不会进行任何更改

    这方面的一个很好的例子是
    WPARAM
    LPARAM
    类型,我认为它们已经更改了几次。现在它们基本上被定义为“大到可以容纳指针”,这意味着它们在32位和64位窗口之间的大小不同

    我会对像
    LPCTSTR
    这样的事情说不,因为对我来说,更清楚地说
    const TCHAR*
    ——整个“长指针”是16位窗口的遗迹。但是,请注意,我说的是
    consttchar*
    ,而不是
    constwchar\u t*

    说到在任何地方都使用它,我想说的是,绝对不要在需要可移植的代码的任何部分使用它-尽管在为Windows编译时,您可以创建自己的TypeDef,其底层类型是Windows数据类型,例如:

    typedef-TickCount-DWORD

    如果您试图使用可能有“滴答数”概念且需要在另一个操作系统上运行的代码,那么我最担心的就是这个问题,但无论如何,此时您的代码和Windows API之间需要一个抽象层

    已编辑问题的更新:


    我自己对萨尔没有任何经验,但乍一看,这并不是一个糟糕的想法。它明确了参数的使用方式,而不依赖于文档,正如MSDN文档所说,它们与静态代码分析工具一起使用。如果您有这样的工具可以确认您正确地使用了注释,那么对我来说这似乎是一件可以做的事情。我的直接反应是,它确实使声明更难阅读,但一般来说,定义API最困难的事情之一是确保预期的行为得到良好的记录和理解。

    这个问题的一部分只是观点,但我的建议是:

    我会同意像DWORD这样的事情。您不应该为Windows数据类型假定特定的基础类型。您应该只假设如果函数说它需要一个
    DWORD
    ,那么您需要为它提供一个
    DWORD
    。它确保了如果Microsoft更改了底层类型,那么您的代码仍然可以正常工作,而不会进行任何更改

    这方面的一个很好的例子是
    WPARAM
    LPARAM
    类型,我认为它们已经更改了几次。现在它们基本上被定义为“大到可以容纳指针”,这意味着它们在32位和64位窗口之间的大小不同

    我会对像
    LPCTSTR
    这样的事情说不,因为对我来说,更清楚地说
    const TCHAR*
    ——整个“长指针”是16位窗口的遗迹。但是,请注意,我说的是
    consttchar*
    ,而不是
    constwchar\u t*

    说到在任何地方都使用它,我想说的是,绝对不要在需要可移植的代码的任何部分使用它-尽管在为Windows编译时,您可以创建自己的TypeDef,其底层类型是Windows数据类型,例如:

    typedef-TickCount-DWORD

    如果您试图使用可能有“滴答数”概念且需要在另一个操作系统上运行的代码,那么我最担心的就是这个问题,但无论如何,此时您的代码和Windows API之间需要一个抽象层

    已编辑问题的更新:


    我自己对萨尔没有任何经验,但乍一看,这并不是一个糟糕的想法。它明确了参数的使用方式,而不依赖于文档,正如MSDN文档所说,它们与静态代码分析工具一起使用。如果您有这样的工具可以确认您正确地使用了注释,那么对我来说这似乎是一件可以做的事情。我的直接反应是,它确实使声明更难阅读,但一般来说,定义API最困难的事情之一是确保预期的行为得到良好的记录和理解。

    DWORD始终是4字节,但对于不同的编译器和平台,
    long
    可以是4字节或8字节。DWORD是在IntSafe.h中声明的,因此必须比其他文件更安全:)DWORD始终为4字节,但对于不同的编译器和平台,
    long
    可以是4字节或8字节。DWORD是在IntSafe.h中声明的,因此必须比其他文件更安全:)