CoCreateFreeThreadedMarshaler 함수(combaseapi.h)
컨텍스트 종속 마샬링이 가능한 집계 가능한 개체를 만듭니다.
구문
HRESULT CoCreateFreeThreadedMarshaler(
[in] LPUNKNOWN punkOuter,
[out] LPUNKNOWN *ppunkMarshal
);
매개 변수
[in] punkOuter
집계 개체의 제어 IUnknown에 대한 포인터입니다.
[out] ppunkMarshal
집계 가능한 마샬러에 대한 인터페이스 포인터를 수신하는 포인터 변수의 주소입니다.
반환 값
이 함수는 E_OUTOFMEMORY 표준 반환 값과 다음 값을 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
마샬러가 만들어졌습니다. |
설명
CoCreateFreeThreadedMarshaler 함수를 사용하면 개체가 동일한 프로세스의 스레드 간에 인터페이스 포인터를 효율적으로 마샬링할 수 있습니다. 개체가 스레드 간 마샬링을 지원하지 않는 경우 이 함수를 호출할 필요가 없습니다. 단일 스레드 아파트와 연결된 스레드조차도 프로세스의 모든 스레드에서 직접 액세스해야 하는 자유 스레드 DLL 서버에서 사용하기 위한 것입니다. 실제 메모리 포인터를 가짜 "프록시"로 다른 아파트로 사용자 지정 마샬링하여 무료 스레드가 아니더라도 모든 발신자에게 직접 액세스할 수 있습니다.
CoCreateFreeThreadedMarshaler 함수는 다음 작업을 수행합니다.
- 자유 스레드 마샬러 개체를 만듭니다.
- 이 마샬러를 punkOuter 매개 변수로 지정된 개체에 집계합니다. 이 개체는 일반적으로 인터페이스 포인터를 마샬링해야 하는 개체입니다.
- CoMarshalInterface 함수의 dwDestContext 매개 변수로 지정된 대상 컨텍스트를 확인합니다.
- 대상 컨텍스트가 MSHCTX_INPROC 경우 인터페이스 포인터를 마샬링 스트림에 복사합니다.
- 대상 컨텍스트가 다른 값인 경우 COM의 기본(표준) 마샬러 instance 찾거나 만들고 마샬링을 위임합니다.
CoCreateFreeThreadedMarshaler 함수를 사용할 때는 주의해야 합니다. 이는 자유 스레드 마샬러를 집계하는 개체의 성능이 COM 규칙의 계산된 위반을 통해 얻을 수 있기 때문이며, 개체가 특정 제한 내에서 작동하지 않는 한 정의되지 않은 동작의 위험이 항상 존재하기 때문입니다. 가장 중요한 제한 사항은 다음과 같습니다.
- 자유 스레드 마샬러 개체는 자유 스레드 마샬러를 상태의 일부로 집계하지 않는 개체의 인터페이스에 대한 직접 포인터를 보유할 수 없습니다. 개체가 일반 단일 스레드 집계 개체에 대한 직접 참조를 사용하는 경우 단일 스레드 속성이 끊어질 수 있습니다. 개체가 일반 다중 스레드 집계 개체에 대한 직접 참조를 사용하는 경우 이러한 개체는 직접 단일 스레드 집계 클라이언트의 요구에 민감도를 표시하지 않는 방식으로 동작할 수 있습니다. 예를 들어 이러한 개체는 새 스레드를 회전하고 매개 변수를 일반 단일 스레드 집계 개체에 대한 참조인 스레드에 전달할 수 있습니다.
- 자유 스레드 마샬러 개체는 다른 아파트의 개체에 대한 프록시에 대한 참조를 보유할 수 없습니다. 프록시는 스레딩 모델에 민감하며 잘못된 클라이언트에서 호출되는 경우 RPC_E_WRONG_THREAD 반환할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | combaseapi.h(Objbase.h 포함) |
라이브러리 | Ole32.lib |
DLL | Ole32.dll |