IMoniker 인터페이스(objidl.h)

COM 개체를 고유하게 식별하는 정보가 포함된 모니커 개체를 사용할 수 있습니다. 모니커 개체의 IMoniker 인터페이스에 대한 포인터가 있는 개체는 개체가 실제로 분산 시스템에 있는 위치에 대한 다른 특정 정보 없이 식별된 개체를 찾고 활성화하고 액세스할 수 있습니다.

모니커가 COM에서 연결의 기초로 사용됩니다. 연결된 개체에는 원본을 식별하는 모니커가 포함되어 있습니다. 사용자가 연결된 개체를 활성화하여 편집하면 모니커가 바인딩됩니다. 그러면 링크 원본이 메모리에 로드됩니다.

상속

IMoniker 인터페이스는 IPersistStream에서 상속됩니다. IMoniker 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IMoniker 인터페이스에는 이러한 메서드가 있습니다.

 
IMoniker::BindToObject

지정된 개체에 바인딩합니다. 바인딩 프로세스에는 개체를 찾고, 필요한 경우 실행 상태로 전환하고, 호출자에게 식별된 개체의 지정된 인터페이스에 대한 포인터를 제공하는 작업이 포함됩니다.
IMoniker::BindToStorage

지정된 개체의 스토리지에 바인딩합니다. IMoniker::BindToObject 메서드와 달리 이 메서드는 모니커로 식별된 개체를 활성화하지 않습니다.
IMoniker::CommonPrefixWith

이 모니커가 지정된 모니커와 공통적으로 갖는 접두사를 기반으로 새 모니커를 만듭니다.
IMoniker::ComposeWith

현재 모니커와 지정된 모니커를 결합하여 새 복합 모니커를 만듭니다.
IMoniker::Enum

복합 모니커의 구성 요소에 대한 열거자에 대한 포인터를 검색합니다.
IMoniker::GetDisplayName

모니커의 표시 이름을 검색합니다.
IMoniker::GetTimeOfLastChange

이 모니커로 식별된 개체가 마지막으로 변경된 시간을 검색합니다.
IMoniker::Hash

모니커의 내부 상태를 사용하여 해시 값을 만듭니다.
IMoniker::Inverse

이 모니커의 역인 모니커를 만듭니다. 이 모니커의 오른쪽 또는 유사한 구조 중 하나로 구성된 경우 모니커는 아무 것도 구성하지 않습니다.
IMoniker::IsEqual

이 모니커가 지정된 모니커와 동일한지 여부를 확인합니다.
IMoniker::IsRunning

이 모니커로 식별된 개체가 현재 로드되고 실행 중인지 여부를 확인합니다.
IMoniker::IsSystemMoniker

이 모니커가 시스템에서 제공하는 모니커 클래스 중 하나인지 여부를 확인합니다.
IMoniker::P arseDisplayName

표시 이름을 모니커로 변환합니다.
IMoniker::Reduce

모니커를 가장 간단한 형식으로 줄입니다.
IMoniker::RelativePathTo

이 모니커와 지정된 모니커 사이에 상대 모니커를 만듭니다.

설명

파일 시스템의 파일 경로와 마찬가지로 모니커에는 COM 개체를 찾아 활성화할 수 있는 정보가 포함됩니다. 모니커에서는 파일에 저장된 문서 개체에서 포함된 개체 내의 선택 항목에 이르기까지 모든 유형의 COM 개체를 식별할 수 있습니다. COM은 시스템에서 가장 일반적으로 발견되는 개체를 식별하는 모니커 개체를 만들 수 있는 모니커 클래스 집합을 제공합니다. 예를 들어 파일에 저장된 텍스트 문서에 포함된 스프레드시트의 셀 범위를 나타내는 개체가 있을 수 있습니다. 분산 시스템에서 이 개체의 모니커는 개체 시스템의 위치, 해당 시스템의 파일 물리적 위치, 해당 파일 내에 포함된 개체의 스토리지, 마지막으로 포함된 개체 내의 셀 범위 위치를 식별합니다.

모니커 개체는 IPersistStream 인터페이스에서 파생되고 시스템의 단일 개체를 고유하게 식별하는 IMoniker 인터페이스를 지원합니다. 모니커를 제공하는 개체가 모니커 개체를 만든 후에는 해당 개체 내에서 이 정보를 변경할 수 없습니다. 모니커 공급자가 정보를 변경하는 경우 새 모니커 개체를 만들어서만 해당 개체를 고유하게 식별할 수 있습니다.

모니커에는 다음과 같은 두 가지 중요한 기능이 있습니다.

  • 모니커를 영구 스토리지에 저장할 수 있습니다. 모니커가 메모리에 다시 로드되는 경우에도 동일한 개체를 식별합니다.
  • 모니커는 바인딩이라는 작업을 지원합니다. 이 작업은 모니커가 명명한 개체를 찾고, 활성화(메모리에 로드)하고, 아직 활성화되지 않은 경우 활성화하고, 해당 개체의 요청된 인터페이스에 대한 포인터를 반환하는 프로세스입니다.

모니커 방지 구현

모니커 방지는 파일, 항목 및 포인터 모니커의 COM 구현을 역으로 사용합니다. 즉, 파일 모니커, 항목 모니커 또는 포인터 모니커의 오른쪽에 구성된 안티 모니커는 아무 것도 작성하지 않습니다.

모니커 클라이언트인 경우 일반적으로 안티 모니커를 사용할 필요가 없습니다. 모니커의 역이 필요한 경우 IMoniker::Inverse를 호출해야 합니다. 예를 들어 복합 모니커의 마지막 부분을 제거하는 역이 필요한 경우 IMoniker::Enum 을 사용하여 모니커의 조각을 열거하고 맨 오른쪽 조각 에서 Inverse 를 호출합니다. 합성의 가장 적합한 부분이 안티 모니커를 역으로 간주하는지 확신할 수 없으므로 이 목적을 위해 안티 모니커를 사용하면 안 됩니다.

모니커 방지를 명시적으로 사용해야 하는 유일한 상황은 새 모니커 클래스를 작성하는 경우이며 모니커에 역을 생성하기 위한 특별한 요구 사항이 없는 경우입니다. 이 경우 Inverse 구현에서 안티 모니커를 반환할 수 있습니다. IMoniker::ComposeWith 구현에서 발생하는 모든 안티 모니커에 대해 모니커 중 하나를 전멸해야 합니다.

CreateAntiMoniker 함수를 사용하여 이러한 모니커를 만듭니다.

클래스 모니커 구현

클래스 모니커 는 개체 클래스를 나타내는 모니커입니다. 클래스 모니커가 생성되는 클래스의 클래스 개체에 바인딩됩니다.

클래스 모니커 는 파일 모니커 또는 항목 모니커와 같은 다른 유형의 모니커와 함께 컴퍼지션에 가장 유용합니다. 클래스 모니커도 IClassActivator 인터페이스에 대한 바인딩을 지원하는 모니커의 오른쪽에 구성될 수 있습니다. 이렇게 하면 IClassActivator 가 클래스 개체 및 클래스의 인스턴스에 대한 액세스를 제공할 수 있습니다.

클래스 모니커를 사용하려면 CreateClassMoniker 함수를 사용하여 이러한 모니커를 만들어야 합니다.

파일 모니커 구현

파일 모니커 는 파일 시스템의 경로를 나타내는 모니커입니다. 파일 모니커는 자체 파일에 저장된 모든 개체를 식별할 수 있습니다. 파일 내에 포함된 개체를 식별하려면 파일 모니커의 오른쪽에 다른 클래스(예: 항목 모니커)의 모니커를 작성할 수 있습니다. 그러나 복합 파일 모니커의 왼쪽에 있는 모니커는 다른 파일 모니커, 안티 모니커 또는 클래스 모니커여야 합니다. 예를 들어 항목 모니커가 복합 파일 모니커의 왼쪽에 표시되는 것은 불법입니다.

안티 모니커는 모니커가 나타내는 경로의 구성 요소의 역이 아니라 전체 파일 모니커의 역함수입니다. 즉, 파일 모니커 오른쪽에 안티 모니커를 작성하면 전체 파일 모니커가 제거됩니다. 파일 모니커가 나타내는 경로의 가장 오른쪽 구성 요소만 제거하려면 ".." 경로를 기반으로 별도의 파일 모니커를 만든 다음 파일 모니커의 끝에 구성해야 합니다.

모니커 클라이언트(모니커를 사용하여 개체에 대한 인터페이스 포인터 가져오기)는 일반적으로 모니커의 클래스를 알 필요가 없습니다. IMoniker 인터페이스 포인터를 사용하여 메서드를 호출할 수 있습니다.

모니커 공급자(모니커 클라이언트가 액세스할 수 있도록 개체를 식별하는 모니커를 나눠주기)는 식별하는 개체가 파일에 저장된 경우 파일 모니커를 사용해야 합니다. 각 개체가 자체 파일에 있는 경우 파일 모니커만 필요한 형식입니다. 식별된 개체가 파일보다 작은 경우 파일 모니커 외에도 다른 유형의 모니커(예: 항목 모니커)를 사용해야 합니다.

파일 모니커를 사용하려면 CreateFileMoniker 함수를 사용하여 모니커를 만들어야 합니다. 파일 모니커가 바인딩될 때 개체를 로드할 수 있도록 하려면 개체가 IPersistFile 인터페이스를 구현해야 합니다.

모니커 공급자의 가장 일반적인 예는 연결을 지원하는 COM 서버 애플리케이션입니다. COM 서버 애플리케이션이 전체 파일 기반 문서에만 연결을 지원하는 경우 파일 모니커는 필요한 유일한 모니커 유형입니다. COM 서버 애플리케이션이 문서보다 작은 개체(예: 문서 또는 포함된 개체의 섹션)에 대한 연결을 지원하는 경우 항목 모니커와 파일 모니커를 사용해야 합니다.

제네릭 복합 모니커 구현

제네릭 복합 모니커는 구성 요소가 서로에 대한 특별한 지식이 없는 복합 모니커입니다.

컴퍼지션은 두 모니커를 함께 조인하는 프로세스입니다. 경우에 따라 특정 클래스의 두 모니커를 특수한 방식으로 결합할 수 있습니다. 예를 들어 불완전한 경로를 나타내는 파일 모니커와 상대 경로를 나타내는 다른 파일 모니커를 결합하여 전체 경로를 나타내는 단일 파일 모니커를 형성할 수 있습니다. 이것은 비일반적 컴퍼지션의 예입니다. 반면에 제네릭 컴퍼지션은 클래스에 관계없이 두 모니커를 연결할 수 있습니다. 비일반 컴퍼지션은 관련된 모니커의 클래스에 따라 달라지므로 특정 클래스의 IMoniker::ComposeWith 메서드 구현에서만 수행할 수 있습니다. 새 모니커 클래스를 작성하는 경우 새로운 유형의 비일반 컴퍼지션을 정의할 수 있습니다. 반면, 제네릭 컴퍼지션은 CreateGenericComposite 함수에 의해 수행됩니다.

모니커 클라이언트(모니커를 사용하여 개체에 대한 인터페이스 포인터를 가져오는 경우)는 일반적으로 모니커의 클래스 또는 제네릭 복합 또는 비제네릭 복합체인지 여부를 알 필요가 없습니다. IMoniker 인터페이스 포인터를 사용하여 메서드를 호출할 수 있습니다.

모니커 공급자(모니커 클라이언트가 액세스할 수 있도록 개체를 식별하는 모니커를 나눠주기)는 두 모니커를 함께 구성해야 할 수 있습니다. 예를 들어 항목 모니커를 사용하여 개체를 식별하는 경우 개체를 전달하기 전에 개체의 컨테이너를 식별하는 모니커로 구성해야 합니다. IMoniker::ComposeWith 메서드를 사용하여 첫 번째 모니커에서 메서드를 호출하고 두 번째 모니커를 매개 변수로 전달합니다. 이 메서드는 제네릭 또는 비일반 복합체를 생성할 수 있습니다.

제네릭 복합 모니커를 명시적으로 만들어야 하는 유일한 경우는 고유한 모니커 클래스를 작성하는 경우입니다. IMoniker::ComposeWith 구현에서 가능하면 비일반 컴퍼지션을 수행하려고 시도해야 합니다. 비일반 컴퍼지션을 수행할 수 없고 제네릭 컴퍼지션이 허용되는 경우 CreateGenericComposite 함수를 호출하여 제네릭 복합 모니커를 만들 수 있습니다.

항목 모니커 구현

항목 모니커를 사용하여 문서의 일부, 복합 문서 내의 포함된 개체 또는 스프레드시트 내의 셀 범위와 같은 컨테이너 내의 개체를 식별합니다. 항목 모니커가 파일 모니커와 함께 사용되는 경우가 많습니다. 파일 모니커는 컨테이너를 식별하는 데 사용되고 항목 모니커는 컨테이너 내의 항목을 식별하는 데 사용됩니다.

항목 모니커에는 텍스트 문자열이 포함됩니다. 이 문자열은 컨테이너 개체에서 포함된 항목을 다른 항목과 구분하는 데 사용됩니다. 컨테이너 개체는 IOleItemContainer 인터페이스를 구현해야 합니다. 이 인터페이스를 사용하면 개체를 식별하는 문자열만 지정하면 항목 모니커 코드가 개체에 대한 포인터를 가져올 수 있습니다.

모니커 클라이언트(모니커를 사용하여 개체에 대한 인터페이스 포인터 가져오기)는 일반적으로 모니커의 클래스를 알 필요가 없습니다. IMoniker 인터페이스 포인터를 사용하여 메서드를 호출하기만 하면 됩니다.

식별된 개체가 다른 개체 내에 포함되어 있고 문자열을 사용하여 개별적으로 식별할 수 있는 경우 모니커 공급자(모니커 클라이언트가 액세스할 수 있도록 개체를 식별하는 모니커를 나눠주기)는 항목 모니커를 사용해야 합니다. 다른 유형의 모니커(예: 파일 모니커)를 사용하여 컨테이너 개체를 식별합니다.

항목 모니커를 사용하려면 CreateItemMoniker 함수를 사용하여 모니커를 만들어야 합니다. 항목 모니커가 바인딩될 때 개체를 로드할 수 있도록 하려면 개체의 컨테이너 가 IOleItemContainer 인터페이스를 구현해야 합니다.

모니커 공급자의 가장 일반적인 예는 연결을 지원하는 COM 애플리케이션입니다. COM 애플리케이션이 파일 기반 문서보다 작은 개체에 대한 연결을 지원하는 경우 항목 모니커를 사용해야 합니다. 문서 내의 선택 영역에 연결할 수 있는 서버 애플리케이션의 경우 항목 모니커를 사용하여 해당 개체를 식별합니다. 포함된 개체에 연결할 수 있는 컨테이너 애플리케이션의 경우 항목 모니커를 사용하여 포함된 개체를 식별합니다.

OBJREF 모니커 구현

OBJREF 모니커 는 로컬 또는 원격으로 out-of-process 서버에서 실행되는 개체 instance 대한 참조를 나타냅니다. 모니커는 instance 개체와 개체가 실행 중인 컴퓨터를 식별합니다.

OBJREF 모니커는 실행 중인 개체가 out-of-process라는 점을 제외하고 포인터 모니커와 여러 가지 면에서 유사합니다. 클라이언트는 OBJREF 모니 커에서 IMoniker::BindToObject 를 호출하고 가져온 포인터를 사용하여 위치에 관계없이 실행 중인 개체에 액세스할 수 있습니다.

포인터 모니커와 중요한 차이점은 OBJREF 모니커의 표시 이름을 HTML 페이지에 포함할 수 있고 모니커가 나타내는 실행 중인 개체를 클라이언트 스크립트, 애플릿 또는 ActiveX 컨트롤에 바인딩할 수 있다는 것입니다.

OBJREF 모니커의 기본 용도는 인터넷을 통해 실행 중인 개체 instance 대한 액세스 권한을 얻는 것입니다. 활성 서버 페이지 또는 동적 HTML 콘텐츠를 생성하는 다른 방법에서는 OBJREF 모니커의 표시 이름을 매개 변수에 애플릿 또는 ActiveX 컨트롤에 배치합니다. applet 또는 컨트롤의 코드는 CreateObjrefMoniker 함수를 호출하여 표시 이름을 기반으로 OBJREF 모니커를 만든 다음, 결과 OBJREF 모니커에서 IMoniker::BindToObject를 호출하여 실행 중인 개체 instance 대한 액세스를 가져옵니다. 그런 다음 활성 서버 페이지는 실행 중인 개체에 대한 포인터를 페이지의 클라이언트로 다시 마샬링합니다.

포인터 모니커 구현

포인터 모니커는 기본적으로 모니커처럼 보이고 모니커가 필요한 인터페이스에 전달될 수 있도록 인터페이스 포인터를 래핑합니다. 포인터 모니커 바인딩은 포인터의 QueryInterface 메서드를 호출하여 수행됩니다.

포인터 모니커의 인스턴스는 serialize를 거부합니다. 즉, IPersistStream::Save 가 오류를 반환합니다. 그러나 이러한 모니커를 RPC 호출에서 다른 프로세스로 마샬링할 수 있습니다. 내부적으로 시스템은 인터페이스 포인터 마샬링에 표준 패러다임을 사용하여 포인터를 마샬링하고 숨기지 않습니다.

포인터 모니커가 거의 필요하지 않습니다. 영구 표현이 없는 개체를 식별하기 위해 모니커가 필요한 경우에만 포인터 모니커를 사용합니다. 포인터 모니커를 사용하면 이러한 개체가 모니커 바인딩 작업에 참여할 수 있습니다.

URL 모니커 구현

IMoniker의 URL 모니커 구현은 IUnknownIAsyncMoniker 인터페이스도 지원하는 URL 모니커 개체에 있습니다. IMoniker 인터페이스는 IPersistStreamIUnknown에서 해당 정의를 상속하고 IPersistStreamIPersist에서 상속합니다. 따라서 IMoniker 구현에는 IPersistStream 및 IPersist 에 대한 지원이 포함 됩니다.

IAsyncMoniker 인터페이스는 단순히 IUnknown입니다. (추가 메서드는 없습니다.) 클라이언트가 모니커가 비동기 바인딩을 지원하는지 여부를 확인할 수 있도록 하는 데 사용됩니다.

이 개체의 IMoniker 인터페이스에 대한 포인터를 얻으려면 CreateURLMonikerEx 함수를 호출합니다.

모니커 클라이언트(모니커를 사용하여 개체에 대한 인터페이스 포인터 가져오기)는 일반적으로 사용 중인 모니커의 클래스를 알 필요가 없습니다. IMoniker 인터페이스 포인터를 사용하여 메서드를 호출하기만 하면 됩니다.

모니커 공급자(모니커 클라이언트가 액세스할 수 있도록 개체를 식별하는 모니커를 나눠주기)는 식별되는 개체가 다른 개체 내에 포함되어 있고 문자열을 사용하여 개별적으로 식별할 수 있는 경우 항목 모니커를 사용해야 합니다. 또한 컨테이너 개체를 식별하려면 다른 유형의 모니커(예: 파일 모니커)를 사용해야 합니다.

항목 모니커를 사용하려면 CreateItemMoniker 함수를 사용하여 모니커를 만들어야 합니다. 항목 모니커가 바인딩될 때 개체를 로드할 수 있도록 하려면 개체의 컨테이너 가 IOleItemContainer 인터페이스를 구현해야 합니다.

모니커 공급자의 가장 일반적인 예는 연결을 지원하는 COM 애플리케이션입니다. COM 애플리케이션이 파일 기반 문서보다 작은 개체에 대한 연결을 지원하는 경우 항목 모니커를 사용해야 합니다. 문서 내의 선택 영역에 연결할 수 있는 서버 애플리케이션의 경우 항목 모니커를 사용하여 해당 개체를 식별합니다. 포함된 개체에 연결할 수 있는 컨테이너 애플리케이션의 경우 항목 모니커를 사용하여 포함된 개체를 식별합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 objidl.h

추가 정보

CreateAntiMoniker

CreateClassMoniker

CreateFileMoniker

CreateGenericComposite

CreateItemMoniker

CreateObjrefMoniker

CreateURLMonikerEx

모니커