gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:48:32 25 4
gpt4 key购买 nike

我正在查看 PnP Configuration Manager functions并看到每个都以这三个宏开头:

CMAPI CONFIGRET WINAPI

我必须深入 CfgMgr32.h 才能找到 CMAPI,它定义为:

#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif

根据 Tim Roberts' article on DLL's in Kernel Mode , 这允许带有 CMAPI 的函数在运行时或链接时加载。我们已经知道 WINAPI 只是一个 macro for a calling convention .

但是 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;

CONFIGRETRETURN_TYPE 的别名,RETURN_TYPE 是附加了附加语义信息的 DWORD 的别名通过 SAL annotations (静态代码分析器使用 SAL 注释)。

Annotating Function Behavior包含有关此特定注释的详细信息:

_Return_type_success_(expr)

May be applied to a typedef. Indicates that all functions that return that type and do not explicitly have _Success_ are annotated as if they had _Success_(expr). _Return_type_success_ cannot be used on a function or a function pointer typedef.


CMAPI 预处理器符号在 CfgMgr32.h 中定义为

#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif

的用途与您提出的不同:它允许库的消费者和生产者使用相同的头文件。生产者定义 _CFGMGR32_ 预处理器符号,并提供函数定义。消费者未定义 _CFGMGR32_ 预处理器符号,CMAPI 扩展为导入说明符 (__declspec(dllimport),在 中定义ntdef.h)。这用于 Load-Time Dynamic Linking (与 Run-Time Dynamic Linking 相比)。它根本不用于静态链接。

关于c++ - CONFIGRET 返回类型是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33150019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com