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.
![]() |
---|
İç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(¢er);
//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