簡體   English   中英

CONFIGRET返回類型是什么意思?

[英]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。


所述CMAPICfgMgr32.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM