IStorage::CreateStorage 方法 (objidl.h)
CreateStorage 方法會建立並開啟此儲存物件內巢狀的新儲存物件,並以指定存取模式中的指定名稱開啟。
語法
HRESULT CreateStorage(
[in] const OLECHAR *pwcsName,
[in] DWORD grfMode,
[in] DWORD reserved1,
[in] DWORD reserved2,
[out] IStorage **ppstg
);
參數
[in] pwcsName
寬字元 Null 終止 Unicode 字串的指標,其中包含新建立的記憶體物件名稱。 稍後可以使用名稱重新開啟記憶體物件。 名稱長度不能超過 31 個字元,不包括字串終止符。 OLE 保留 000 到 01f 字元作為數據流/記憶體名稱的第一個字元。 這是複合檔案限制,而不是結構化儲存限制。
[in] grfMode
值,指定開啟新建立的儲存物件時要使用的存取模式。 如需可能值的詳細資訊和描述,請參閱 STGM 常數。
[in] reserved1
保留以備將來之用;必須為零。
[in] reserved2
保留以備將來之用;必須為零。
[out] ppstg
成功時,指向新建立之記憶體物件的 IStorage 指標位置的指標。 如果發生錯誤,此參數會設定為 NULL 。
傳回值
這個方法可以傳回其中一個值。
傳回碼 | 描述 | |
---|---|---|
S_OK | 已成功建立記憶體物件。 | |
E_PENDING | 僅限異步記憶體:目前無法使用部分或所有必要的數據。 | |
STG_E_ACCESSDENIED | 沒有足夠的許可權可建立記憶體物件。 | |
STG_E_FILEALREADYEXISTS | 為記憶體物件指定的名稱已存在於記憶體物件中, 而 grfMode 參數包含旗標STGM_FAILIFTHERE。 | |
STG_E_INSUFFICIENTMEMORY | 記憶體對象因為記憶體不足而未建立。 | |
STG_E_INVALIDFLAG | 針對 grfMode< 參數指定的值不是有效的 STGM 常數值。 | 指定給 grfMode 參數的 he 值不是有效的 |
STG_E_INVALIDFUNCTION | 不支援 grfMode 參數中的指定旗標組合。 | |
STG_E_INVALIDNAME | 不是 pwcsName 的有效值。 | |
STG_E_INVALIDPOINTER | 為儲存物件指定的指標無效。 | |
STG_E_INVALIDPARAMETER | 其中一個參數無效。 | |
STG_E_REVERTED | 記憶體物件已由交易樹狀結構中上方的還原作業失效。 | |
STG_E_TOOMANYOPENFILES | 記憶體物件未建立,因為有太多開啟的檔案。 | |
STG_S_CONVERTED | 具有指定名稱的現有數據流已取代為包含名為CONTENTS之單一數據流的新儲存物件。 將會新增新的記憶體物件。 |
備註
如果 pwcsName 參數中指定的記憶體已存在於父記憶體物件內,而 grfMode 參數包含STGM_CREATE旗標,則會以新的記憶體取代現有的記憶體。 如果 grfMode 參數包含STGM_CONVERT旗標,則現有的專案會轉換成名為 CONTENTS 的數據流物件,並建立包含 CONTENTS 數據流物件的新儲存物件。 舊專案和新儲存物件的建立解構都受限於父記憶體物件上的交易模式。 請注意,如果您也使用 STGM_CREATE,則無法使用 STGM_CONVERT。
IStorage::CreateStorage 方法的 COM 提供的複合檔案實作不支援下列行為:
- 非根記憶體的STGM_PRIORITY旗標。
- 從相同的父記憶體開啟相同儲存物件一次以上。 必須指定STGM_SHARE_EXCLUSIVE旗標。
- STGM_DELETEONRELEASE旗標。 如果指定此旗標,函式會傳回STG_E_INVALIDFLAG。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | objidl.h |
程式庫 | Uuid.lib |
Dll | Ole32.dll |