IMetaDataInfo::GetFileMapping 方法
取得對應檔案的記憶體區域,以及對應的型別。
語法
HRESULT GetFileMapping (
[out] const void **ppvData,
[out] ULONGLONG *pcbData,
[out] DWORD *pdwMappingType
);
參數
ppvData
[out] 對應檔案開頭的指標。
pcbData
[out] 對應區域的大小。 如果 pdwMappingType
為 fmFlat
,則這是檔案的大小。
pdwMappingType
[out] 指出對應型別的 CorFileMapping 值。 Common Language Runtime (CLR) 的目前實作一律會傳回 fmFlat
。 保留其他值供以後使用。 不過,您應該一律驗證傳回的值,因為未來發行的版本或服務可能會啟用其他值。
傳回值
HRESULT | 描述 |
---|---|
S_OK |
所有輸出都會填滿。 |
E_INVALIDARG |
傳遞了 null 來作為引數值。 |
COR_E_NOTSUPPORTED |
CLR 實作無法提供記憶體區域的相關資訊。 這可能因為以下原因而發生: - 所開啟的中繼資料範圍具有 ofWrite 或 ofCopyMemory 旗標。- 所開啟的中繼資料範圍沒有 ofReadOnly 旗標。- 使用了 IMetaDataDispenser::OpenScopeOnMemory 方法來只開啟檔案的中繼資料部分。 - 檔案不是可攜式可執行檔 (PE) 檔案。 注意:這些條件取決於 CLR 實作,而且在未來的 CLR 版本中可能會減弱。 |
備註
只有在基礎中繼資料範圍開啟時,ppvData
所指向的記憶體才會有效。
若要讓這個方法能夠運作,您在呼叫 IMetaDataDispenser::OpenScope 方法將磁碟檔案上的中繼資料對應至記憶體時,必須指定 ofReadOnly
旗標,而且不得指定 ofWrite
或 ofCopyMemory
旗標。
每個範圍的檔案對應型別選擇專門適用於給定的 CLR 實作。 使用者無法進行設定。 CLR 的目前實作一律會在 pdwMappingType
中傳回 fmFlat
,但這可能會在 CLR 的未來版本或給定版本的未來服務版本中變更。 您應該一律檢查 pdwMappingType
中傳回的值,因為不同型別的配置和位移會不同。
不支援針對這三個參數的任何一個傳遞 NULL。 此方法會傳回 E_INVALIDARG
,而且不會填入任何輸出。 忽略對應類型或區域大小可能會導致程式異常終止。
規格需求
平台:請參閱系統需求。
標頭:Cor.h
程式庫:作為 MSCorEE.dll 中的資源使用
.NET Framework版本:自 4 起可用