다음을 통해 공유


마샬링 전역 함수

이러한 함수는 마샬링 데이터를 인터페이스 포인터로 마샬링하고 변환하는 기능을 지원합니다.

Important

다음 표에 나열된 함수는 Windows 런타임 실행되는 애플리케이션에서 사용할 수 없습니다.

속성 설명
AtlFreeMarshalStream 마샬링 데이터 및 포인터를 해제합니다 IStream .
AtlMarshalPtrInProc 새 스트림 개체를 만들고 지정된 인터페이스 포인터를 마샬링합니다.
AtlUnmarshalPtr 스트림의 마샬링 데이터를 인터페이스 포인터로 변환합니다.

요구 사항:

헤더: atlbase.h

AtlFreeMarshalStream

스트림에서 마샬링 데이터를 해제한 다음 스트림 포인터를 해제합니다.

HRESULT AtlFreeMarshalStream(IStream* pStream);

매개 변수

pStream
[in] 마샬링에 IStream 사용되는 스트림의 인터페이스에 대한 포인터입니다.

예시

AtlMarshalPtrInProc에 대한 예제를 참조하세요.

AtlMarshalPtrInProc

새 스트림 개체를 만들고, 프록시의 CLSID를 스트림에 쓰고, 프록시를 스트림으로 초기화하는 데 필요한 데이터를 작성하여 제공된 인터페이스 포인터를 마샬링합니다.

HRESULT AtlMarshalPtrInProc(
    IUnknown* pUnk,
    const IID& iid,
    IStream** ppStream);

매개 변수

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

iid
[in] 마샬링되는 인터페이스의 GUID입니다.

ppStream
[out] 마샬링에 IStream 사용되는 새 스트림 개체의 인터페이스에 대한 포인터입니다.

Return Value

표준 HRESULT 값입니다.

설명

포인터를 여러 스트림으로 마샬링할 수 있도록 MSHLFLAGS_TABLESTRONG 플래그가 설정됩니다. 포인터를 여러 번 숨기지 않을 수도 있습니다.

마샬링이 실패하면 스트림 포인터가 해제됩니다.

AtlMarshalPtrInProc 는 in-process 개체에 대한 포인터에서만 사용할 수 있습니다.

예시

//marshaling interface from one thread to another

//IStream ptr to hold serialized presentation of interface ptr
IStream* g_pStm;

//forward declaration
DWORD WINAPI ThreadProc(LPVOID lpParameter);

HRESULT WriteInterfacePtrToStream(IMyCircle *pCirc)
{
   //marshal the interface ptr to another thread
   //pCirc has to be pointer to actual object & not a proxy
   HRESULT hr = AtlMarshalPtrInProc(pCirc, IID_IMyCircle, &g_pStm);

   //m_dwThreadID is a DWORD holding thread ID of thread being created.
   CreateThread(NULL, 0, ThreadProc, NULL, 0, &m_dwThreadID);
   return hr;
}

DWORD WINAPI ThreadProc(LPVOID /*lpParameter*/)
{
   // CoInitializeEx is per thread, so initialize COM on this thread
   // (required by AtlUnmarshalPtr)
   HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
   if (SUCCEEDED(hr))
   {
      IMyCircle* pCirc;

      //unmarshal IMyCircle ptr from the stream
      hr = AtlUnmarshalPtr(g_pStm, IID_IMyCircle, (IUnknown**)&pCirc);

      // use IMyCircle ptr to call its methods
      double center;
      pCirc->get_XCenter(&center);

      //release the stream if no other thread requires it 
      //to unmarshal the IMyCircle interface pointer
      hr = AtlFreeMarshalStream(g_pStm);

      CoUninitialize();
   }

   return hr;
}

AtlUnmarshalPtr

스트림의 마샬링 데이터를 클라이언트에서 사용할 수 있는 인터페이스 포인터로 변환합니다.

HRESULT AtlUnmarshalPtr(
    IStream* pStream,
    const IID& iid,
    IUnknown** ppUnk);

매개 변수

pStream
[in] 숨기지 않는 스트림에 대한 포인터입니다.

iid
[in] 숨기지 않는 인터페이스의 GUID입니다.

ppUnk
[out] 숨을 들이지 않는 인터페이스에 대한 포인터입니다.

Return Value

표준 HRESULT 값입니다.

예시

AtlMarshalPtrInProc에 대한 예제를 참조하세요.

참고 항목

함수