Aracılığıyla paylaş


AtlMarshalPtrInProc

Yeni bir akım nesnesi oluşturur, proxy CLSID değeri stream değerine yazar ve proxy akımına başlatmak için gereken verileri yazarak belirtilen arabirim işaretçisi sýralar.

Önemli notÖnemli

İçinde yürütme uygulamaları, bu işlev kullanılamaz Windows Çalışma Zamanı.

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

Parametreler

  • pUnk
    [in] Konmasını arabirimi için bir işaretçi.

  • iid
    [in] Sıralanmış arabirimi GUID.

  • ppStream
    [Çıkış] Bir işaretçi IStream arabirim üzerinde sıralama için kullanılan yeni stream nesnesi.

Dönüş Değeri

Standart hresult değeri.

Notlar

mshlflags_tablestrong şekilde fare işaretçisini birden çok akış sıralanabilir bayrağını ayarlayın.İşaretçiyi, aynı zamanda birden çok kez sıralanması olabilir.

Düzenleme başarısız olursa, akış işaretçisi serbest bırakılır.

AtlMarshalPtrInProcyalnızca işlem içi nesneye bir işaretçi üzerinde 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;
}

Gereksinimler

Başlık: atlbase.h

Ayrıca bkz.

Başvuru

AtlUnmarshalPtr

AtlFreeMarshalStream

MSHLFLAGS

Diğer Kaynaklar

Genel sıralama işlevleri