Udostępnij za pośrednictwem


Funkcje globalne kierowania

Te funkcje zapewniają obsługę marshalingu i konwertowania danych marshalingowych na wskaźniki interfejsu.

Ważne

Funkcje wymienione w poniższej tabeli nie mogą być używane w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.

Nazwa/nazwisko opis
AtlFreeMarshalStream Zwalnia dane marshala i IStream wskaźnik.
AtlMarshalPtrInProc Tworzy nowy obiekt strumienia i marshaluje określony wskaźnik interfejsu.
AtlUnmarshalPtr Konwertuje dane marshalingu strumienia na wskaźnik interfejsu.

Wymagania:

Nagłówek: atlbase.h

AtlFreeMarshalStream

Zwalnia dane organizatora w strumieniu, a następnie zwalnia wskaźnik strumienia.

HRESULT AtlFreeMarshalStream(IStream* pStream);

Parametry

pStream
[in] Wskaźnik do interfejsu IStream w strumieniu używanym do marshalingu.

Przykład

Zobacz przykład atlMarshalPtrInProc.

AtlMarshalPtrInProc

Tworzy nowy obiekt strumienia, zapisuje identyfikator CLSID serwera proxy do strumienia i organizuje określony wskaźnik interfejsu, pisząc dane potrzebne do zainicjowania serwera proxy do strumienia.

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

Parametry

Punk
[in] Wskaźnik do interfejsu do marshalingu.

identyfikator iid
[in] Identyfikator GUID interfejsu, który jest marshalowany.

ppStream
[out] Wskaźnik do interfejsu w IStream nowym obiekcie strumienia używanym do marshalingu.

Wartość zwracana

Standardowa wartość HRESULT.

Uwagi

Flaga MSHLFLAGS_TABLESTRONG jest ustawiona, aby wskaźnik mógł być przesłonięty do wielu strumieni. Wskaźnik może być również wielokrotnie unmarshaled.

Jeśli przeprowadzanie marshalingu zakończy się niepowodzeniem, wskaźnik strumienia zostanie zwolniony.

AtlMarshalPtrInProc można używać tylko w wskaźniku do obiektu w procesie.

Przykład

//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

Konwertuje dane dotyczące organizowania strumienia na wskaźnik interfejsu, którego może używać klient.

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

Parametry

pStream
[in] Wskaźnik do strumienia jest unmarshaled.

identyfikator iid
[in] Identyfikator GUID interfejsu jest unmarshaled.

ppUnk
[out] Wskaźnik do niezamężnego interfejsu.

Wartość zwracana

Standardowa wartość HRESULT.

Przykład

Zobacz przykład atlMarshalPtrInProc.

Zobacz też

Funkcje