CoTreatAsClass 函式 (objbase.h)
建立或移除模擬,其中一個類別的物件會被視為不同類別的物件。
語法
HRESULT CoTreatAsClass(
[in] REFCLSID clsidOld,
[in] REFCLSID clsidNew
);
參數
[in] clsidOld
要模擬之物件的CLSID。
[in] clsidNew
應該模擬原始物件的物件的 CLSID。 這會取代 clsidOld 的任何現有模擬。 此參數可以CLSID_NULL,在此情況下, 會移除 clsidOld 的任何現有模擬。
傳回值
此函式可以傳回標準傳回值E_INVALIDARG,以及下列值。
傳回碼 | 描述 |
---|---|
|
模擬已成功建立或移除。 |
|
clsidOld 參數未在註冊資料庫中正確註冊。 |
|
從註冊資料庫讀取時發生錯誤。 |
|
寫入註冊資料庫時發生錯誤。 |
備註
此函式會設定指定之物件的登錄中的 TreatAs 專案,讓另一個應用程式能夠模擬物件。 模擬可讓應用程式開啟和編輯不同格式的物件,同時保留物件的原始格式。 設定此項目之後,每當 CoGetClassObject 之類的任何函式指定物件的原始 CLSID (clsidOld) 時,就會以透明方式轉送到新的 CLSID (clsidNew) ,因此啟動與 TreatAs CLSID 相關聯的應用程式。 儲存物件時,可以以其原生格式儲存,這可能會導致原始格式不支援編輯。
如果您的應用程式支援模擬,請在下列情況下呼叫 CoTreatAsClass :
- 為了回應使用者要求 (透過轉換對話框) 指定對象被視為不同類別的物件, (一個應用程式下建立的物件會在另一個應用程式下執行,同時保留原始格式資訊) 。
- 在安裝程式中,若要註冊某個物件類別,請將其視為不同類別的物件。
在安裝程式中使用 CoTreatAsClass 的範例是應用程式的更新版本。 更新應用程式時,可以使用舊版建立的物件啟用並視為新版本的物件,同時保留先前的格式資訊。 這可讓您讓使用者選擇在儲存時轉換,或以先前的格式儲存,可能會遺失舊版中無法使用的格式資訊。
設定仿真的其中一個結果是當您列舉動詞時,如同默認處理程式中的 IOleObject::EnumVerbs 方法實作,這會從 clsidNew 列舉動詞,而不是 clsidOld。
為了確保在安裝應用程式時移除現有的模擬資訊,安裝程式應該呼叫 CoTreatAsClass,並將 clsidNew 參數設定為 CLSID_NULL,以移除所安裝類別的任何現有模擬。
如果登錄中沒有指派給 AutoTreatAs 機碼的 CLSID,請將 clsidNew 和 clsidOld 設定為相同的值會移除 TreatAs 專案,因此沒有模擬。 如果有指派給 AutoTreatAs 金鑰的 CLSID,該 CLSID 會指派給 TreatAs 金鑰。
CoTreatAsClass 不會驗證 clsidNew 的適當登錄專案是否存在。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | objbase.h |
程式庫 | Ole32.lib |
Dll | Ole32.dll |