MFC 通用控制項程式庫的隔離
通用控制項程式庫現在在 MFC 中是隔離的,可讓不同的模組 (例如,使用者 DLL) 透過在其資訊清單中指定版本,來使用不同版本的通用控制項程式庫。
MFC 應用程式(或 MFC 呼叫的使用者程式碼)會透過名為 Afx
FunctionName 的包裝函式呼叫 Common Controls 程式庫 API,其中 FunctionName 是 Common Controls API 的名稱。 這些包裝函式是在 afxcomctl32.h 和 afxcomctl32.inl 中定義。
您可以使用 AFX_COMCTL32_IF_EXISTS 和 AFX_COMCTL32_IF_EXISTS2 宏(定義于 afxcomctl32.h)來判斷 Common Controls 程式庫是否實作特定 API,而不是呼叫 GetProcAddress 。
技術上來說,您是透過包裝函式類別 CComCtlWrapper
(在 afxcomctl32.h 中定義) 呼叫通用控制項程式庫 API。 CComCtlWrapper
也負責載入和卸載 comctl32.dll。 MFC 模組狀態包含 CComCtlWrapper
執行個體的指標。 您可以使用 afxComCtlWrapper
巨集來存取包裝函式類別。
請注意,直接從 MFC 應用程式或使用者 DLL 呼叫通用控制項 API (不使用 MFC 包裝函式) 在許多情況下可以運作,因為 MFC 應用程式或使用者 DLL 是繫結至其在資訊清單中要求的通用控制項程式庫。 不過,因為 MFC 程式碼可能是以不同的通用控制項程式庫版本從使用者 DLL 呼叫,所以 MFC 程式碼本身必須使用包裝函式。