2015-10-15 212 views
0

我是在PnP Configuration Manager functions採取一看,只見每一個與這三個宏開始:CONFIGRET返回類型是什麼意思?

CMAPI CONFIGRET WINAPI 

我不得不裏面挖CfgMgr32.h找到CMAPI,其定義爲:

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

根據this artcle,這允許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; 

我從來沒有見過這個已經,這是什麼意思?這些功能的返回類型是什麼?

+1

返回值[記錄](https://msdn.microsoft.com/en-us/library/windows/hardware/hh780226.aspx):*「如果操作成功,則該函數返回CR_SUCCESS。否則,它將返回Cfgmgr32.h中定義的一個CR_前綴錯誤代碼。「*這個特殊的類型並不是很有趣,它恰好是一個用[SAL Annotations](https://msdn.microsoft.com/en-us/library/ms235402.aspx)註解的DWORD。 :*「0表示成功」 *(見[註解功能行爲(https://msdn.microsoft.com/en-us/library/jj159529.aspx))SAL被用於靜態代碼分析工具 – IInspectable

+0

整齊,我從來不知道SAL註釋,爲什麼不把你的評論包裝在答案中,以便我能接受它?謝謝。 –

回答

1

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)

可能被應用到一個typedef。表示返回該類型並且沒有明確具有的所有函數_Success_被註釋爲好像它們具有_Success_(expr)_Return_type_success_不能用於函數或函數指針typedef。


作爲

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

CfgMgr32.h定義的CMAPI預處理符號用於不同目的,比你提出什麼:它允許使用相同的頭文件,爲消費者和圖書館的製作人。生產者定義了_CFGMGR32_預處理器符號,並提供了函數定義。消費者沒有定義_CFGMGR32_預處理器符號,並且CMAPI擴展爲導入說明符(__declspec(dllimport),定義在ntdef.h)。這用於Load-Time Dynamic Linking(與Run-Time Dynamic Linking)。它根本不用於靜態鏈接。

相關問題