AtlMarshalPtrInProc
Crée un objet de flux, écrit le CLSID du proxy au flux, et marshale le pointeur d'interface spécifié en écrivant les données nécessaires pour initialiser le proxy dans le flux.
Important
Cette fonction ne peut pas être utilisée dans les applications qui s'exécutent dans Windows Runtime.
HRESULT AtlMarshalPtrInProc(
IUnknown* pUnk,
const IID& iid,
IStream** ppStream
);
Paramètres
pUnk
[in] Pointeur vers l'interface à marshaler.iid
[in] GUID de l'interface qui est marshalé.ppStream
[out] Pointeur vers l'interface d' IStream sur le nouvel objet de flux utilisé pour marshaler.
Valeur de retour
Une valeur HRESULT standard.
Notes
La balise de MSHLFLAGS_TABLESTRONG est définie afin que le pointeur peut être marshalé à plusieurs flux. Le pointeur peut également être démarshalé plusieurs fois.
Si le marshaling de échec, le pointeur sur stream est libéré.
AtlMarshalPtrInProc peut être utilisé que sur un pointeur vers un objet in-process.
Exemple
//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;
}
Configuration requise
Header: atlbase.h