마샬링 전역 함수
이러한 함수는 마샬링 데이터를 인터페이스 포인터로 마샬링하고 변환하는 기능을 지원합니다.
Important
다음 표에 나열된 함수는 Windows 런타임 실행되는 애플리케이션에서 사용할 수 없습니다.
속성 | 설명 |
---|---|
AtlFreeMarshalStream | 마샬링 데이터 및 포인터를 해제합니다 IStream . |
AtlMarshalPtrInProc | 새 스트림 개체를 만들고 지정된 인터페이스 포인터를 마샬링합니다. |
AtlUnmarshalPtr | 스트림의 마샬링 데이터를 인터페이스 포인터로 변환합니다. |
요구 사항:
헤더: atlbase.h
AtlFreeMarshalStream
스트림에서 마샬링 데이터를 해제한 다음 스트림 포인터를 해제합니다.
HRESULT AtlFreeMarshalStream(IStream* pStream);
매개 변수
pStream
[in] 마샬링에 IStream
사용되는 스트림의 인터페이스에 대한 포인터입니다.
예시
AtlMarshalPtrInProc에 대한 예제를 참조하세요.
AtlMarshalPtrInProc
새 스트림 개체를 만들고, 프록시의 CLSID를 스트림에 쓰고, 프록시를 스트림으로 초기화하는 데 필요한 데이터를 작성하여 제공된 인터페이스 포인터를 마샬링합니다.
HRESULT AtlMarshalPtrInProc(
IUnknown* pUnk,
const IID& iid,
IStream** ppStream);
매개 변수
pUnk
[in] 마샬링할 인터페이스에 대한 포인터입니다.
iid
[in] 마샬링되는 인터페이스의 GUID입니다.
ppStream
[out] 마샬링에 IStream
사용되는 새 스트림 개체의 인터페이스에 대한 포인터입니다.
Return Value
표준 HRESULT 값입니다.
설명
포인터를 여러 스트림으로 마샬링할 수 있도록 MSHLFLAGS_TABLESTRONG 플래그가 설정됩니다. 포인터를 여러 번 숨기지 않을 수도 있습니다.
마샬링이 실패하면 스트림 포인터가 해제됩니다.
AtlMarshalPtrInProc
는 in-process 개체에 대한 포인터에서만 사용할 수 있습니다.
예시
//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
스트림의 마샬링 데이터를 클라이언트에서 사용할 수 있는 인터페이스 포인터로 변환합니다.
HRESULT AtlUnmarshalPtr(
IStream* pStream,
const IID& iid,
IUnknown** ppUnk);
매개 변수
pStream
[in] 숨기지 않는 스트림에 대한 포인터입니다.
iid
[in] 숨기지 않는 인터페이스의 GUID입니다.
ppUnk
[out] 숨을 들이지 않는 인터페이스에 대한 포인터입니다.
Return Value
표준 HRESULT 값입니다.
예시
AtlMarshalPtrInProc에 대한 예제를 참조하세요.