Sdílet prostřednictvím


Zařazení globálních funkcí

Tyto funkce poskytují podporu pro zařazování a převod dat zařazování na ukazatele rozhraní.

Důležité

Funkce uvedené v následující tabulce nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.

Název Popis
AtlFreeMarshalStream Uvolní zařazování dat a IStream ukazatel.
AtlMarshalPtrInProc Vytvoří nový objekt streamu a zařadí zadaný ukazatel rozhraní.
AtlUnmarshalPtr Převede zařazování dat datového proudu na ukazatel rozhraní.

Požadavky:

Hlavička: atlbase.h

AtlFreeMarshalStream

Uvolní zařazování dat ve streamu a následně uvolní ukazatel streamu.

HRESULT AtlFreeMarshalStream(IStream* pStream);

Parametry

pStream
[v] Ukazatel na IStream rozhraní datového proudu, který se používá pro zařazování.

Příklad

Podívejte se na příklad pro AtlMarshalPtrInProc.

AtlMarshalPtrInProc

Vytvoří nový objekt streamu, zapíše do tohoto streamu identifikátor CLSID proxy a zařadí zadaný ukazatel rozhraní tím, že do streamu zapíše data potřebná k inicializaci proxy.

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

Parametry

punk
[v] Ukazatel na rozhraní, které se má zařaďte.

iid
[v] Identifikátor GUID rozhraní, které je zařazováno.

ppStream
[ven] Ukazatel na rozhraní nového objektu IStream datového proudu, který se používá pro zařazování.

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

Příznak MSHLFLAGS_TABLESTRONG je nastavený, aby bylo možné ukazatel zařaďte do více datových proudů. Ukazatel může být také vícekrát rozsažen.

Pokud se zařazování nezdaří, uvolní se ukazatel datového proudu.

AtlMarshalPtrInProc lze použít pouze u ukazatele na objekt v procesu.

Příklad

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

Převede zařazovaná data streamu na ukazatel rozhraní, který může použít klient.

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

Parametry

pStream
[v] Ukazatel na stream, který se nerozlišuje.

iid
[v] Identifikátor GUID rozhraní, které je nezastřeženo.

ppUnk
[ven] Ukazatel na nezastřežené rozhraní.

Návratová hodnota

Standardní hodnota HRESULT.

Příklad

Podívejte se na příklad pro AtlMarshalPtrInProc.

Viz také

Functions