Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Deze functies bieden ondersteuning voor marshaling en het converteren van marshaling-gegevens naar interfacepointers.
Belangrijk
De functies in de volgende tabel kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.
| Naam | Description |
|---|---|
| AtlFreeMarshalStream | De marshal-gegevens en de IStream aanwijzer worden vrijgegeven. |
| AtlMarshalPtrInProc | Hiermee maakt u een nieuw stroomobject en marshals de opgegeven interfacepointer. |
| AtlUnmarshalPtr | Converteert de marshaling-gegevens van een stream naar een interfaceaanwijzer. |
Vereisten:
Header: atlbase.h
AtlFreeMarshalStream
Hiermee worden de marshal-gegevens in de stream uitgebracht en wordt vervolgens de streampointer vrijgegeven.
HRESULT AtlFreeMarshalStream(IStream* pStream);
Parameterwaarden
pStream
[in] Een aanwijzer naar de IStream interface op de stroom die wordt gebruikt voor marshaling.
Example
Zie het voorbeeld voor AtlMarshalPtrInProc.
AtlMarshalPtrInProc
Hiermee maakt u een nieuw stroomobject, schrijft u de CLSID van de proxy naar de stroom en marshalt u de opgegeven interfacepointer door de gegevens te schrijven die nodig zijn om de proxy in de stream te initialiseren.
HRESULT AtlMarshalPtrInProc(
IUnknown* pUnk,
const IID& iid,
IStream** ppStream);
Parameterwaarden
Punk
[in] Een aanwijzer naar de interface die moet worden marshaled.
iid
[in] De GUID van de interface die marshaled wordt.
Ppstream
[uit] Een aanwijzer naar de IStream interface van het nieuwe stroomobject dat wordt gebruikt voor marshaling.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
De vlag MSHLFLAGS_TABLESTRONG is ingesteld, zodat de aanwijzer op meerdere stromen kan worden geplaatst. De aanwijzer kan ook meerdere keren niet worden gemarshaleerd.
Als marshaling mislukt, wordt de streampointer vrijgegeven.
AtlMarshalPtrInProc kan alleen worden gebruikt op een aanwijzer naar een in-process object.
Example
//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;
}
AtlUnmarshalPtr
Converteert de marshaling-gegevens van de stream naar een interfaceaanwijzer die door de client kan worden gebruikt.
HRESULT AtlUnmarshalPtr(
IStream* pStream,
const IID& iid,
IUnknown** ppUnk);
Parameterwaarden
pStream
[in] Een aanwijzer naar de stroom die niet wordt gemarhaleerd.
iid
[in] De GUID van de interface die niet wordt gemarhaleerd.
ppUnk
[uit] Een aanwijzer naar de niet-gemarhaleerde interface.
Retourwaarde
Een standaard HRESULT-waarde.
Example
Zie het voorbeeld voor AtlMarshalPtrInProc.