다음을 통해 공유


CoGetStandardMarshal 함수(combaseapi.h)

호출자에 따라 클라이언트 프로세스 또는 서버 프로세스에서 기본 또는 표준 마샬링 개체를 만들고 해당 개체의 IMarshal 구현에 대한 포인터를 반환합니다.

구문

HRESULT CoGetStandardMarshal(
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags,
  [out]          LPMARSHAL *ppMarshal
);

매개 변수

[in] riid

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

[in] pUnk

마샬링할 인터페이스에 대한 포인터입니다.

[in] dwDestContext

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

[in, optional] pvDestContext

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

[in] mshlflags

마샬링할 데이터를 클라이언트 프로세스(일반 사례)로 다시 전송할지 아니면 여러 클라이언트에서 검색할 수 있는 전역 테이블에 쓸 것인지를 나타냅니다. 값은 MSHLFLAGS 열거형에서 가져옵니다.

[out] ppMarshal

표준 마샬러에 대한 인터페이스 포인터를 수신하는 IMarshal* 포인터 변수의 주소입니다.

반환 값

이 함수는 다음 값뿐만 아니라 E_FAIL, E_OUTOFMEMORY 및 E_UNEXPECTED 표준 반환 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
IMarshal instance 성공적으로 반환되었습니다.
CO_E_NOTINITIALIZED
이 함수를 호출하려면 현재 스레드에서 CoInitialize 또는 OleInitialize 함수를 호출해야 합니다.

설명

CoGetStandardMarshal 함수는 필요에 따라 클라이언트 프로세스 또는 서버 프로세스에서 기본 또는 표준 마샬링 개체를 만들고 해당 개체의 IMarshal 포인터를 호출자에 반환합니다. IMarshal을 구현하는 경우 완전히 이해하지 못하거나 처리하려는 대상 컨텍스트를 COM의 기본 구현에 위임하는 방법으로 구현에서 CoGetStandardMarshal을 호출할 수 있습니다. 그렇지 않으면 COM이 내부 마샬링 프로시저의 일부로 호출하는 이 함수를 무시할 수 있습니다.

클라이언트 프로세스의 COM 라이브러리가 마샬링된 인터페이스 포인터를 받으면 패킷을 구분 해제하기 위해 프록시를 만드는 데 사용할 CLSID를 찾습니다. 패킷에 프록시에 대한 CLSID가 포함되어 있지 않으면 COM 은 CoGetStandardMarshal을 호출하여 NULLpUnk 값을 전달합니다. 이 함수는 클라이언트 프로세스에서 표준 프록시를 만들고 해당 프록시의 IMarshal 구현에 대한 포인터를 반환합니다. COM은 이 포인터를 사용하여 CoUnmarshalInterface 를 호출하여 요청된 인터페이스에 대한 포인터를 검색합니다.

OLE 서버 애플리케이션의 IMarshal 구현에서 CoGetStandardMarshal을 호출하는 경우 요청되는 인터페이스인 (riid)의 IID와 (pUnk)에 대한 포인터를 모두 전달해야 합니다.

이 함수는 다음 작업을 수행합니다.

  1. pUnk가 NULL인지 여부를 확인합니다.
  2. pUnkNULL인 경우 지정된 riid에 대한 클라이언트 프로세스에서 표준 인터페이스 프록시를 만들고 프록시의 IMarshal 포인터를 반환합니다.
  3. pUnkNULL이 아닌 경우 개체에 대한 마샬러가 이미 있는지 확인하고, 필요한 경우 새 마샬러를 만들고, 마샬러의 IMarshal 포인터를 반환합니다.

요구 사항

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

추가 정보

IMarshal