CONFIGRET返回类型是什么意思?
What does the CONFIGRET return-type mean?
我看了看PnP配置管理器的功能,发现每个功能都以这三个宏开始:
CMAPI CONFIGRET WINAPI
我必须在CfgMgr32.h中查找CMAPI
,它被定义为:
#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif
根据Tim Roberts关于内核模式下的DLL的文章,这允许带有CMAPI
的函数在运行时或链接时加载。我们已经知道WINAPI
只是一个调用约定的宏。
那么CONFIGRET
呢?从CfgMgr32.h,定义为:
//
// Standardized Return Value data type
//
typedef _Return_type_success_(return == 0) DWORD RETURN_TYPE;
typedef RETURN_TYPE CONFIGRET;
我从来没有见过这个,这是什么意思?这些函数的返回类型是什么?
CONFIGRET
的底层数据类型是DWORD
,定义在CfgMgr32.h:
//
// Standardized Return Value data type
//
typedef _Return_type_success_(return == 0) DWORD RETURN_TYPE;
typedef RETURN_TYPE CONFIGRET;
CONFIGRET
是RETURN_TYPE
的别名,RETURN_TYPE
是DWORD
的别名,通过SAL注释附加了额外的语义信息(SAL注释由静态代码分析器使用)。
注释函数行为包含这个特定注释的详细信息:
_Return_type_success_(expr)
可以应用于类型定义。指示所有返回该类型且没有显式具有_Success_的函数都被注释为具有
_Success_(expr)
。_Return_type_success_不能用于函数或函数指针的类型定义。
CMAPI
预处理器符号在CfgMgr32.h中定义为
#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif
的用途与您所建议的不同:它允许库的使用者和生产者使用相同的头文件。生产者定义_CFGMGR32_
预处理器符号,并提供函数定义。消费者没有定义_CFGMGR32_
预处理器符号,CMAPI
扩展为一个导入说明符(__declspec(dllimport)
,在ntdef.h中定义)。这用于加载时动态链接(相对于运行时动态链接)。它根本不用于静态链接。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?