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 |
---|---|
|
HRESULT가 성공적으로 마샬링되었습니다. |
|
이 함수가 호출되기 전에 현재 스레드에서 CoInitialize 또는 OleInitialize 함수가 호출되지 않았습니다. |
설명
CoMarshalInterface 함수는 iUnknown 구현이 pUnk로 가리키는 개체에서 riid가 참조하는 인터페이스를 마샬링합니다. 이를 위해 CoMarshalInterface 함수는 다음 작업을 수행합니다.
- 개체에서 IMarshal 인터페이스에 대한 포인터를 쿼리합니다. 개체가 IMarshal을 구현하지 않으면 COM을 사용하여 마샬링 지원을 제공하는 경우 CoMarshalInterface 는 COM의 기본 IMarshal 구현에 대한 포인터를 가져옵니다.
- 반환된 IMarshal 인터페이스 포인터를 사용하여 IMarshal::GetUnmarshalClass를 호출하여 개체 프록시의 CLSID 를 가져옵니다.
- 마샬링에 사용할 스트림에 프록시의 CLSID를 씁니다.
- IMarshal::MarshalInterface를 호출하여 인터페이스 포인터를 마샬링합니다.
기존 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 |