다음을 통해 공유


CoMarshalInterface 함수(combaseapi.h)

일부 클라이언트 프로세스에서 프록시 개체를 초기화하는 데 필요한 데이터를 스트림에 씁니다.

구문

HRESULT CoMarshalInterface(
  [in]           LPSTREAM  pStm,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

매개 변수

[in] pStm

마샬링하는 동안 사용할 스트림에 대한 포인터입니다. IStream을 참조하세요.

[in] riid

마샬링할 인터페이스의 식별자에 대한 참조입니다. 이 인터페이스는 IUnknown 인터페이스에서 파생되어야 합니다.

[in] pUnk

마샬링할 인터페이스에 대한 포인터입니다. 이 인터페이스는 IUnknown 인터페이스에서 파생되어야 합니다.

[in] dwDestContext

지정된 인터페이스를 숨기지 않을 대상 컨텍스트입니다. 가능한 값은 열거형 MSHCTX에서 가져옵니다. 현재, 현재 프로세스의 다른 아파트(MSHCTX_INPROC), 현재 프로세스(MSHCTX_LOCAL)와 동일한 컴퓨터의 다른 프로세스 또는 다른 컴퓨터(MSHCTX_DIFFERENTMACHINE)의 프로세스에서 언마샬링이 발생할 수 있습니다.

[in, optional] pvDestContext

이 매개 변수는 예약되어 있으며 NULL이어야 합니다.

[in] mshlflags

마샬링할 데이터를 클라이언트 프로세스(일반적인 경우)로 다시 전송할지 아니면 여러 클라이언트에서 검색할 수 있는 전역 테이블에 쓸지 여부를 지정하는 플래그입니다. 가능한 값은 MSHLFLAGS 열거형에서 가져옵니다.

반환 값

이 함수는 IStream에서 반환된 스트림 액세스 오류 값과 다음 값에 E_FAIL, E_OUTOFMEMORY 및 E_UNEXPECTED 표준 반환 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
HRESULT가 성공적으로 마샬링되었습니다.
CO_E_NOTINITIALIZED
이 함수가 호출되기 전에 현재 스레드에서 CoInitialize 또는 OleInitialize 함수가 호출되지 않았습니다.

설명

CoMarshalInterface 함수는 iUnknown 구현이 pUnk로 가리키는 개체에서 riid가 참조하는 인터페이스를 마샬링합니다. 이를 위해 CoMarshalInterface 함수는 다음 작업을 수행합니다.

  1. 개체에서 IMarshal 인터페이스에 대한 포인터를 쿼리합니다. 개체가 IMarshal을 구현하지 않으면 COM을 사용하여 마샬링 지원을 제공하는 경우 CoMarshalInterface 는 COM의 기본 IMarshal 구현에 대한 포인터를 가져옵니다.
  2. 반환된 IMarshal 인터페이스 포인터를 사용하여 IMarshal::GetUnmarshalClass를 호출하여 개체 프록시의 CLSID 를 가져옵니다.
  3. 마샬링에 사용할 스트림에 프록시의 CLSID를 씁니다.
  4. IMarshal::MarshalInterface를 호출하여 인터페이스 포인터를 마샬링합니다.
클라이언트 프로세스의 COM 라이브러리는 CoUnmarshalInterface 함수를 호출하여 데이터를 추출하고 프록시를 초기화합니다. CoUnmarshalInterface를 호출하기 전에 스트림의 원래 위치로 돌아갑니다.

기존 COM 인터페이스를 구현하거나 MIDL(Microsoft Interface Definition Language)을 사용하여 고유한 인터페이스를 정의하는 경우 MIDL에서 생성된 프록시 및 스텁은 CoMarshalInterface 를 호출합니다. 고유한 프록시 및 스텁을 작성하는 경우 프록시 코드 및 스텁 코드는 각각 CoMarshalInterface 를 호출하여 인터페이스 포인터를 올바르게 마샬링해야 합니다. 프록시 및 스텁 코드에서 직접 IMarshal 을 호출하는 것은 권장되지 않습니다.

IMarshal의 고유한 구현을 작성하고 프록시가 프라이빗 개체에 액세스해야 하는 경우 해당 개체에 대한 인터페이스 포인터를 스트림에 쓰는 데이터의 일부로 포함할 수 있습니다. 이러한 상황에서 인터페이스 포인터를 전달할 때 COM의 기본 마샬링 구현을 사용하려는 경우 개체에서 CoMarshalInterface 를 호출하여 그렇게 할 수 있습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 combaseapi.h(Objbase.h 포함)
라이브러리 Ole32.lib
DLL Ole32.dll

추가 정보

CoUnmarshalInterface

IMarshal::MarshalInterface