Marshaling Global Functions

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze functies bieden ondersteuning voor marshaling en het converteren van marshaling-gegevens naar interfacepointers.

Belangrijk

De functies in de volgende tabel kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.

Naam Description
AtlFreeMarshalStream De marshal-gegevens en de IStream aanwijzer worden vrijgegeven.
AtlMarshalPtrInProc Hiermee maakt u een nieuw stroomobject en marshals de opgegeven interfacepointer.
AtlUnmarshalPtr Converteert de marshaling-gegevens van een stream naar een interfaceaanwijzer.

Vereisten:

Header: atlbase.h

AtlFreeMarshalStream

Hiermee worden de marshal-gegevens in de stream uitgebracht en wordt vervolgens de streampointer vrijgegeven.

HRESULT AtlFreeMarshalStream(IStream* pStream);

Parameterwaarden

pStream
[in] Een aanwijzer naar de IStream interface op de stroom die wordt gebruikt voor marshaling.

Example

Zie het voorbeeld voor AtlMarshalPtrInProc.

AtlMarshalPtrInProc

Hiermee maakt u een nieuw stroomobject, schrijft u de CLSID van de proxy naar de stroom en marshalt u de opgegeven interfacepointer door de gegevens te schrijven die nodig zijn om de proxy in de stream te initialiseren.

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

Parameterwaarden

Punk
[in] Een aanwijzer naar de interface die moet worden marshaled.

iid
[in] De GUID van de interface die marshaled wordt.

Ppstream
[uit] Een aanwijzer naar de IStream interface van het nieuwe stroomobject dat wordt gebruikt voor marshaling.

Retourwaarde

Een standaard HRESULT-waarde.

Opmerkingen

De vlag MSHLFLAGS_TABLESTRONG is ingesteld, zodat de aanwijzer op meerdere stromen kan worden geplaatst. De aanwijzer kan ook meerdere keren niet worden gemarshaleerd.

Als marshaling mislukt, wordt de streampointer vrijgegeven.

AtlMarshalPtrInProc kan alleen worden gebruikt op een aanwijzer naar een in-process object.

Example

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

Converteert de marshaling-gegevens van de stream naar een interfaceaanwijzer die door de client kan worden gebruikt.

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

Parameterwaarden

pStream
[in] Een aanwijzer naar de stroom die niet wordt gemarhaleerd.

iid
[in] De GUID van de interface die niet wordt gemarhaleerd.

ppUnk
[uit] Een aanwijzer naar de niet-gemarhaleerde interface.

Retourwaarde

Een standaard HRESULT-waarde.

Example

Zie het voorbeeld voor AtlMarshalPtrInProc.

Zie ook

Functies