次の方法で共有


CoTreatAsClass 関数 (objbase.h)

エミュレーションを確立または削除します。このエミュレーションでは、1 つのクラスのオブジェクトが別のクラスのオブジェクトとして扱われます。

構文

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 を呼び出します。

  • 指定したオブジェクトを別のクラスのオブジェクトとして扱う (元の形式情報を保持しながら、あるアプリケーションの下に作成されたオブジェクトを別のアプリケーションで実行する) というエンド ユーザー要求に応答します。
  • セットアップ プログラムで、1 つのクラスのオブジェクトを別のクラスのオブジェクトとして扱うよう登録します。
最初のケースの例として、エンド ユーザーは、元のアプリケーションのスプレッドシート形式を読み書きできる別のアプリケーションを使用して、あるアプリケーションによって作成されたスプレッドシートを編集したい場合があります。 エミュレーションをサポートするアプリケーションの場合、 CoTreatAsClass を呼び出して、変換ダイアログ ボックスに [名前を付けて扱う ] オプションを実装できます。

セットアップ プログラムで CoTreatAsClass を 使用する例は、アプリケーションの更新バージョンにあります。 アプリケーションが更新されると、以前のバージョンで作成されたオブジェクトをアクティブ化し、以前の形式情報を保持しながら、新しいバージョンのオブジェクトとして扱うことができます。 これにより、ユーザーが保存時に変換するか、以前の形式で保存するオプションをユーザーに提供できます。古いバージョンでは使用できない形式情報が失われる可能性があります。

エミュレーションを設定する結果の 1 つは、既定のハンドラーの IOleObject::EnumVerbs メソッドの実装のように動詞を列挙すると、clsidOld ではなく clsidNew から動詞を列挙することです。

アプリケーションのインストール時に既存のエミュレーション情報を確実に削除するには、セットアップ プログラムで CoTreatAsClass を呼び出し、 clsidNew パラメーターを CLSID_NULL に設定して、インストールするクラスの既存のエミュレーションを削除する必要があります。

レジストリ内の AutoTreatAs キーに CLSID が割り当てられていない場合は、 clsidNewclsidOld を同じ値に設定すると TreatAs エントリが削除されるため、エミュレーションはありません。 AutoTreatAs キーに CLSID が割り当てられている場合、その CLSID は TreatAs キーに割り当てられます。

CoTreatAsClass は、clsidNew の適切なレジストリ エントリが現在存在するかどうかを検証しません。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objbase.h
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

CoGetTreatAsClass