C++ CONFIGRET返回类型是什么意思?

C++ CONFIGRET返回类型是什么意思?,c++,winapi,driver,typedef,return-type,C++,Winapi,Driver,Typedef,Return Type,我在查看时看到,每个宏都以以下三个宏开始: CMAPI CONFIGRET WINAPI 我不得不在CfgMgr32.h中挖掘,以找到CMAPI,它的定义如下: #if !defined (_CFGMGR32_) #define CMAPI DECLSPEC_IMPORT #else #define CMAPI #endif // // Standardized Return Value data type // typedef _Return_type_success_(retur

我在查看时看到,每个宏都以以下三个宏开始:

CMAPI CONFIGRET WINAPI
我不得不在CfgMgr32.h中挖掘,以找到
CMAPI
,它的定义如下:

#if !defined (_CFGMGR32_)
#define CMAPI     DECLSPEC_IMPORT
#else
#define CMAPI
#endif
//
// Standardized Return Value data type
//
typedef _Return_type_success_(return == 0) DWORD        RETURN_TYPE;
typedef RETURN_TYPE  CONFIGRET;
根据,这允许在运行时或链接时加载带有
CMAPI
的函数。我们已经知道,
WINAPI
仅仅是一个例子

但是
CONFIGRET
呢?根据CfgMgr32.h,其定义为:

#if !defined (_CFGMGR32_)
#define CMAPI     DECLSPEC_IMPORT
#else
#define CMAPI
#endif
//
// Standardized Return Value data type
//
typedef _Return_type_success_(return == 0) DWORD        RETURN_TYPE;
typedef RETURN_TYPE  CONFIGRET;

我以前从没见过,这是什么意思?这些函数的返回类型是什么?

CONFIGRET的底层数据类型是
DWORD
,如CfgMgr32.h中所定义:

CONFIGRET
RETURN\u TYPE
的别名,
RETURN\u TYPE
DWORD
的别名,附加了附加语义信息(静态代码分析器使用SAL注释)

包含有关此特定批注的详细信息:

\u返回\u类型\u成功\u(expr)

可应用于typedef。指示所有返回该类型且未显式具有_Success_uu的函数都被注释为具有
\u Success_uuu(expr)
_Return_type_success_不能用于函数或函数指针typedef


CfgMgr32.h中定义的
CMAPI
预处理器符号如下


与您建议的用途不同:它允许库的使用者和生产者使用相同的头文件。生产者定义
\u CFGMGR32\u
预处理器符号,并提供函数定义。使用者不定义
\u CFGMGR32
预处理器符号,
CMAPI
扩展为导入说明符(
\u declspec(dllimport)
,在ntdef.h中定义)。这用于(vs.)。它根本不用于静态链接。

返回值是:“如果操作成功,函数将返回CR_SUCCESS。否则,它将返回Cfgmgr32.h中定义的一个CR_前缀错误代码。”具体类型并不有趣。它恰好是一个带注释的
DWORD
。这一条简单地说:“0意味着成功”(参见)。SAL用于静态代码分析工具。很好,我从来不知道SAL注释。你为什么不把你的评论写在一个答案里,这样我就可以接受了?谢谢。上面的“这篇文章”链接已经失效。请将其替换为工作链接。@Laxman很好,下次我将尝试发布文章标题,以帮助人们通过谷歌搜索进行查找。我已经更新了这个问题,加入了最新的文章。出于历史原因,您也可以在wayback机器上查看截至2015年10月25日的文章: