Aracılığıyla paylaş


Hazırlama Genel İşlevleri

Uyarı

Etkin Şablon Kitaplığı (ATL) desteklenmeye devam eder. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.

Bu işlevler, hazırlama ve verileri arabirim işaretçilerine dönüştürme desteği sağlar.

Önemli

Aşağıdaki tabloda listelenen işlevler, Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz.

Veri Akışı Adı Açıklama
AtlFreeMarshalStream Hazırlama verilerini ve işaretçiyi IStream serbest bırakır.
AtlMarshalPtrInProc Yeni bir akış nesnesi oluşturur ve belirtilen arabirim işaretçisini sıralar.
AtlUnmarshalPtr Bir akışın sıralama verilerini arabirim işaretçisine dönüştürür.

Gereksinimler:

Üst bilgi: atlbase.h

AtlFreeMarshalStream

Akıştaki sıralama verilerini serbest bırakır, ardından da akış işaretçisini serbest bırakır.

HRESULT AtlFreeMarshalStream(IStream* pStream);

Parametreler

pStream
[in] Hazırlama için IStream kullanılan akış arabirimine yönelik bir işaretçi.

Örnek

AtlMarshalPtrInProc örneğine bakın.

AtlMarshalPtrInProc

Yeni bir akış nesnesi oluşturur, proxy CLSID değerini akışa yazar ve proxy'yi akış içinde başlatmak üzere gerekli olan veriyi yazarak belirtilen arabirim işaretçisini sıralar.

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

Parametreler

Punk
[in] Sıralanacak arabirimin işaretçisi.

iid
[in] Sıralanan arabirimin GUID'i.

ppStream
[out] Sıralama için IStream kullanılan yeni akış nesnesinde arabirim işaretçisi.

Dönüş Değeri

Standart bir HRESULT değeri.

Açıklamalar

MSHLFLAGS_TABLESTRONG bayrağı, işaretçinin birden çok akışa sıralanması için ayarlanır. İşaretçi birden çok kez de özetlenebilir.

Hazırlama başarısız olursa, akış işaretçisi serbest bırakılır.

AtlMarshalPtrInProc yalnızca işlem içi bir nesnenin işaretçisinde kullanılabilir.

Örnek

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

Akışın sıralama verilerini istemci tarafından kullanılabilen bir arabirim işaretçisine dönüştürür.

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

Parametreler

pStream
[in] Özetlenmeyen akışın işaretçisi.

iid
[in] Özetlenmeyen arabirimin GUID'i.

ppUnk
[out] Özetlenmemiş arabirimin işaretçisi.

Dönüş Değeri

Standart bir HRESULT değeri.

Örnek

AtlMarshalPtrInProc örneğine bakın.

Ayrıca bkz.

İşlevler