共用方式為


CoTreatAsClass 函式 (objbase.h)

建立或移除模擬,其中一個類別的物件會被視為不同類別的物件。

語法

HRESULT CoTreatAsClass(
  [in] REFCLSID clsidOld,
  [in] REFCLSID clsidNew
);

參數

[in] clsidOld

要模擬之物件的CLSID。

[in] clsidNew

應該模擬原始物件的物件的 CLSID。 這會取代 clsidOld 的任何現有模擬。 此參數可以CLSID_NULL,在此情況下, 會移除 clsidOld 的任何現有模擬。

傳回值

此函式可以傳回標準傳回值E_INVALIDARG,以及下列值。

傳回碼 描述
S_OK
模擬已成功建立或移除。
REGDB_E_CLASSNOTREG
clsidOld 參數未在註冊資料庫中正確註冊。
REGDB_E_READREGDB
從註冊資料庫讀取時發生錯誤。
REGDB_E_WRITEREGDB
寫入註冊資料庫時發生錯誤。

備註

此函式會設定指定之物件的登錄中的 TreatAs 專案,讓另一個應用程式能夠模擬物件。 模擬可讓應用程式開啟和編輯不同格式的物件,同時保留物件的原始格式。 設定此項目之後,每當 CoGetClassObject 之類的任何函式指定物件的原始 CLSID (clsidOld) 時,就會以透明方式轉送到新的 CLSID (clsidNew) ,因此啟動與 TreatAs CLSID 相關聯的應用程式。 儲存物件時,可以以其原生格式儲存,這可能會導致原始格式不支援編輯。

如果您的應用程式支援模擬,請在下列情況下呼叫 CoTreatAsClass

  • 為了回應使用者要求 (透過轉換對話框) 指定對象被視為不同類別的物件, (一個應用程式下建立的物件會在另一個應用程式下執行,同時保留原始格式資訊) 。
  • 在安裝程式中,若要註冊某個物件類別,請將其視為不同類別的物件。
第一個案例的範例是,終端使用者可能想要編輯一個應用程式所建立的電子錶格,該應用程式使用不同的應用程式來讀取和寫入原始應用程式的電子錶格格式。 對於支援仿真的應用程式,可以呼叫 CoTreatAsClass ,在轉換對話框中實作 [處理為 ] 選項。

在安裝程式中使用 CoTreatAsClass 的範例是應用程式的更新版本。 更新應用程式時,可以使用舊版建立的物件啟用並視為新版本的物件,同時保留先前的格式資訊。 這可讓您讓使用者選擇在儲存時轉換,或以先前的格式儲存,可能會遺失舊版中無法使用的格式資訊。

設定仿真的其中一個結果是當您列舉動詞時,如同默認處理程式中的 IOleObject::EnumVerbs 方法實作,這會從 clsidNew 列舉動詞,而不是 clsidOld

為了確保在安裝應用程式時移除現有的模擬資訊,安裝程式應該呼叫 CoTreatAsClass,並將 clsidNew 參數設定為 CLSID_NULL,以移除所安裝類別的任何現有模擬。

如果登錄中沒有指派給 AutoTreatAs 機碼的 CLSID,請將 clsidNewclsidOld 設定為相同的值會移除 TreatAs 專案,因此沒有模擬。 如果有指派給 AutoTreatAs 金鑰的 CLSID,該 CLSID 會指派給 TreatAs 金鑰。

CoTreatAsClass 不會驗證 clsidNew 的適當登錄專案是否存在。

規格需求

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

另請參閱

CoGetTreatAsClass