[英]What does the CONFIGRET return-type mean?
我查看了PnP配置管理器功能 ,發現每個功能都以以下三個宏開頭:
CMAPI CONFIGRET WINAPI
我必須在CfgMgr32.h中進行挖掘以找到CMAPI
,該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)
可以應用於typedef。 指示所有返回該類型且沒有顯式具有_Success_的函數都被注釋為好像具有
_Success_(expr)
。 _Return_type_success_不能用於函數或函數指針typedef。
CMAPI
在CfgMgr32.h定義為預處理器符號
#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif
與您建議的目的不同,它的目的不同:它允許將相同的頭文件用於庫的使用者和生產者。 生產者定義_CFGMGR32_
預處理器符號,並提供函數定義。 使用者沒有定義_CFGMGR32_
預處理器符號,並且CMAPI
擴展為導入說明符( __declspec(dllimport)
,在ntdef.h中定義)。 這用於加載時動態鏈接 (相對於運行時動態鏈接 )。 根本不用於靜態鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.