RoGetAgileReference 함수(combaseapi.h)
지정된 인터페이스에서 지정한 개체에 대한 민첩한 참조를 만듭니다.
구문
HRESULT RoGetAgileReference(
[in] AgileReferenceOptions options,
[in] REFIID riid,
[in] IUnknown *pUnk,
[out] IAgileReference **ppAgileReference
);
매개 변수
[in] options
등록 옵션입니다.
[in] riid
Agile 참조를 가져오는 개체의 인터페이스 ID입니다.
[in] pUnk
Agile 참조에 캡슐화할 인터페이스에 대한 포인터입니다. riid와 동일한 형식이어야 합니다. in-process 개체에 대한 포인터이거나 개체의 프록시에 대한 포인터일 수 있습니다.
[out] ppAgileReference
개체에 대한 Agile 참조입니다. Resolve 메서드를 호출하여 Resolve가 호출되는 아파트로 개체를 지역화합니다.
반환 값
이 함수는 이러한 값 중 하나를 반환할 수 있습니다.
반환 값 | 설명 |
---|---|
|
함수가 성공적으로 완료되었습니다. |
|
의 options 매개 변수가 잘못되었습니다. |
|
메모리 부족 조건으로 인해 Agile 참조를 생성할 수 없습니다. |
|
pUnk 매개 변수는 riid 매개 변수로 지정된 인터페이스 ID를 지원하지 않습니다. |
|
개체는 INoMarshal 인터페이스를 구현합니다 . |
설명
기존 개체에서 RoGetAgileReference 함수를 호출하여 개체에 대한 민첩한 참조를 요청합니다. 개체는 Agile일 수도 있지만 반환된 IAgileReference 는 agile입니다. Agile 참조는 IAgileReference 인터페이스를 사용하여 원래 개체를 검색하는 동일한 프로세스 내의 다른 아파트로 전달할 수 있습니다.
이는 개념적으로 기존 GIT(전역 인터페이스 테이블)와 비슷합니다. GIT와 상호 작용하는 대신 IAgileReference 를 가져와서 개체를 직접 검색하는 데 사용됩니다. GIT가 프로세스당 전용인 것처럼 Agile 참조는 프로세스별로 수행되며 마샬링할 수 없습니다.
Agile 참조 기능은 GIT에 대한 성능 향상을 제공합니다. Agile 참조는 기본적으로 즉시 마샬링을 수행하며, Agile 참조가 만들어진 위치와 다른 아파트의 민첩한 참조에서 개체가 검색되는 경우 아파트 간 호출을 저장합니다. 성능 향상을 위해 RoGetAgileReference 함수의 사용자는 동일한 인터페이스를 사용하여 IAgileReference를 만들고 원래 개체를 resolve 수 있습니다. 이렇게 하면 추가 QueryInterface 호출을 저장하여 확인된 개체에서 원하는 인터페이스를 가져옵니다.
예를 들어 IDemo 및 IExample 인터페이스를 구현하는 CDemoExample이라는 비 agile 개체가 있습니다. RoGetAgileReference 함수를 호출하고 IID_IDemo 개체를 전달합니다. 민첩한 IAgileReference 인터페이스 포인터를 다시 가져와서 다른 아파트로 전달할 수 있습니다. 다른 아파트에서 Resolve 메서드를 호출하고 IID_IExample. 이 아파트 내에서 사용할 수 있는 IExample 포인터를 다시 가져옵니다. 이 IExample 포인터는 원래 CDemoExample 개체에 연결된 IExample 프록시입니다. 민첩한 참조는 수동으로 스트림으로 마샬링하고 아파트 경계의 반대편에서 경계를 해제하는 등의 작업의 복잡성을 처리합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1 [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2012 R2 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | combaseapi.h |
라이브러리 | Ole32.lib |
DLL | Ole32.dll |