다음을 통해 공유


CoTreatAsClass 함수(objbase.h)

한 클래스의 개체가 다른 클래스의 개체로 처리되는 에뮬레이션을 설정하거나 제거합니다.

구문

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

매개 변수

[in] clsidOld

에뮬레이트할 개체의 CLSID입니다.

[in] clsidNew

원래 개체를 에뮬레이트해야 하는 개체의 CLSID입니다. 이렇게 하면 clsidOld에 대한 기존 에뮬레이션이 대체됩니다. 이 매개 변수는 CLSID_NULL 수 있습니다. 이 경우 clsidOld 에 대한 기존 에뮬레이션이 제거됩니다.

반환 값

이 함수는 E_INVALIDARG 표준 반환 값과 다음 값을 반환할 수 있습니다.

반환 코드 Description
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 메서드 구현에서와 같이 동사를 열거할 때 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
라이브러리 Ole32.lib
DLL Ole32.dll

추가 정보

CoGetTreatAsClass