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。
如果具有相同名稱的記憶體對象已經存在,且 grfMode 已設定為 STGM_FAILIFTHERE,則此方法會失敗並傳回值STG_E_FILEALREADYEXISTS。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 objidl.h
程式庫 Uuid.lib
Dll Ole32.dll

另請參閱

IStorage - 複合檔案實作

IStorage::OpenStorage