diff --git a/reactos/dll/directx/quartz/filtergraph.c b/reactos/dll/directx/quartz/filtergraph.c
index d978f721eb5..3e9a1da1b82 100644
--- a/reactos/dll/directx/quartz/filtergraph.c
+++ b/reactos/dll/directx/quartz/filtergraph.c
@@ -2557,28 +2557,33 @@ static const IMediaSeekingVtbl IMediaSeeking_VTable =
MediaSeeking_GetPreroll
};
+static inline IFilterGraphImpl *impl_from_IMediaPosition( IMediaPosition *iface )
+{
+ return (IFilterGraphImpl *)((char*)iface - FIELD_OFFSET(IFilterGraphImpl, IMediaPosition_vtbl));
+}
+
/*** IUnknown methods ***/
-static HRESULT WINAPI MediaPosition_QueryInterface(IMediaPosition* iface, REFIID riid, void** ppvObj){
- ICOM_THIS_MULTI(IFilterGraphImpl, IMediaPosition_vtbl, iface);
+static HRESULT WINAPI MediaPosition_QueryInterface(IMediaPosition* iface, REFIID riid, void** ppvObj)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
TRACE("(%p/%p)->(%s (%p), %p)\n", This, iface, debugstr_guid(riid), riid, ppvObj);
-
return Filtergraph_QueryInterface(This, riid, ppvObj);
}
-static ULONG WINAPI MediaPosition_AddRef(IMediaPosition *iface){
- ICOM_THIS_MULTI(IFilterGraphImpl, IMediaPosition_vtbl, iface);
+static ULONG WINAPI MediaPosition_AddRef(IMediaPosition *iface)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
TRACE("(%p/%p)->()\n", This, iface);
-
return Filtergraph_AddRef(This);
}
-static ULONG WINAPI MediaPosition_Release(IMediaPosition *iface){
- ICOM_THIS_MULTI(IFilterGraphImpl, IMediaPosition_vtbl, iface);
+static ULONG WINAPI MediaPosition_Release(IMediaPosition *iface)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
TRACE("(%p/%p)->()\n", This, iface);
-
return Filtergraph_Release(This);
}
@@ -2604,31 +2609,51 @@ static HRESULT WINAPI MediaPosition_Invoke(IMediaPosition* iface, DISPID dispIdM
}
/*** IMediaPosition methods ***/
-static HRESULT WINAPI MediaPosition_get_Duration(IMediaPosition * iface, REFTIME *plength){
- FIXME("(%p)->(%p) stub!\n", iface, plength);
- return E_NOTIMPL;
+static HRESULT WINAPI MediaPosition_get_Duration(IMediaPosition * iface, REFTIME *plength)
+{
+ LONGLONG duration;
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
+ HRESULT hr = IMediaSeeking_GetDuration( (IMediaSeeking *)&This->IMediaSeeking_vtbl, &duration );
+ if (SUCCEEDED(hr)) *plength = duration;
+ return hr;
}
-static HRESULT WINAPI MediaPosition_put_CurrentPosition(IMediaPosition * iface, REFTIME llTime){
- ICOM_THIS_MULTI(IFilterGraphImpl, IMediaPosition_vtbl, iface);
+static HRESULT WINAPI MediaPosition_put_CurrentPosition(IMediaPosition * iface, REFTIME llTime)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
LONGLONG reftime = llTime;
- return IMediaSeeking_SetPositions((IMediaSeeking *)&This->IMediaSeeking_vtbl, &reftime, AM_SEEKING_AbsolutePositioning, NULL, AM_SEEKING_NoPositioning);
+ return IMediaSeeking_SetPositions((IMediaSeeking *)&This->IMediaSeeking_vtbl,
+ &reftime, AM_SEEKING_AbsolutePositioning,
+ NULL, AM_SEEKING_NoPositioning);
}
-static HRESULT WINAPI MediaPosition_get_CurrentPosition(IMediaPosition * iface, REFTIME *pllTime){
- FIXME("(%p)->(%p) stub!\n", iface, pllTime);
- return E_NOTIMPL;
+static HRESULT WINAPI MediaPosition_get_CurrentPosition(IMediaPosition * iface, REFTIME *pllTime)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
+ LONGLONG pos;
+ HRESULT hr = IMediaSeeking_GetCurrentPosition( (IMediaSeeking *)&This->IMediaSeeking_vtbl, &pos );
+ if (SUCCEEDED(hr)) *pllTime = pos;
+ return hr;
}
-static HRESULT WINAPI MediaPosition_get_StopTime(IMediaPosition * iface, REFTIME *pllTime){
- FIXME("(%p)->(%p) stub!\n", iface, pllTime);
- return E_NOTIMPL;
+static HRESULT WINAPI MediaPosition_get_StopTime(IMediaPosition * iface, REFTIME *pllTime)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
+ LONGLONG pos;
+ HRESULT hr = IMediaSeeking_GetStopPosition( (IMediaSeeking *)&This->IMediaSeeking_vtbl, &pos );
+ if (SUCCEEDED(hr)) *pllTime = pos;
+ return hr;
}
-static HRESULT WINAPI MediaPosition_put_StopTime(IMediaPosition * iface, REFTIME llTime){
- FIXME("(%p)->(%f) stub!\n", iface, llTime);
- return E_NOTIMPL;
+static HRESULT WINAPI MediaPosition_put_StopTime(IMediaPosition * iface, REFTIME llTime)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
+ LONGLONG reftime = llTime;
+
+ return IMediaSeeking_SetPositions((IMediaSeeking *)&This->IMediaSeeking_vtbl,
+ NULL, AM_SEEKING_NoPositioning,
+ &reftime, AM_SEEKING_AbsolutePositioning);
}
static HRESULT WINAPI MediaPosition_get_PrerollTime(IMediaPosition * iface, REFTIME *pllTime){
@@ -2641,14 +2666,16 @@ static HRESULT WINAPI MediaPosition_put_PrerollTime(IMediaPosition * iface, REFT
return E_NOTIMPL;
}
-static HRESULT WINAPI MediaPosition_put_Rate(IMediaPosition * iface, double dRate){
- FIXME("(%p)->(%f) stub!\n", iface, dRate);
- return E_NOTIMPL;
+static HRESULT WINAPI MediaPosition_put_Rate(IMediaPosition * iface, double dRate)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
+ return IMediaSeeking_SetRate((IMediaSeeking *)&This->IMediaSeeking_vtbl, dRate);
}
-static HRESULT WINAPI MediaPosition_get_Rate(IMediaPosition * iface, double *pdRate){
- FIXME("(%p)->(%p) stub!\n", iface, pdRate);
- return E_NOTIMPL;
+static HRESULT WINAPI MediaPosition_get_Rate(IMediaPosition * iface, double *pdRate)
+{
+ IFilterGraphImpl *This = impl_from_IMediaPosition( iface );
+ return IMediaSeeking_GetRate((IMediaSeeking *)&This->IMediaSeeking_vtbl, pdRate);
}
static HRESULT WINAPI MediaPosition_CanSeekForward(IMediaPosition * iface, LONG *pCanSeekForward){
@@ -4872,6 +4899,9 @@ static HRESULT WINAPI MediaEvent_WaitForCompletion(IMediaEventEx *iface,
TRACE("(%p/%p)->(%d, %p)\n", This, iface, msTimeout, pEvCode);
+ if (This->state != State_Running)
+ return VFW_E_WRONG_STATE;
+
if (WaitForSingleObject(This->hEventCompletion, msTimeout) == WAIT_OBJECT_0)
{
*pEvCode = This->CompletionStatus;
diff --git a/reactos/dll/directx/quartz/main.c b/reactos/dll/directx/quartz/main.c
index 6b4c135d234..7828487b2dd 100644
--- a/reactos/dll/directx/quartz/main.c
+++ b/reactos/dll/directx/quartz/main.c
@@ -28,19 +28,16 @@
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
+extern HRESULT WINAPI QUARTZ_DllGetClassObject(REFCLSID, REFIID, LPVOID *) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI QUARTZ_DllCanUnloadNow(void) DECLSPEC_HIDDEN;
+extern BOOL WINAPI QUARTZ_DllMain(HINSTANCE, DWORD, LPVOID) DECLSPEC_HIDDEN;
+
static DWORD dll_ref = 0;
/* For the moment, do nothing here. */
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
{
- switch(fdwReason) {
- case DLL_PROCESS_ATTACH:
- DisableThreadLibraryCalls(hInstDLL);
- break;
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
+ return QUARTZ_DllMain( hInstDLL, fdwReason, lpv );
}
/******************************************************************************
@@ -172,36 +169,29 @@ static const IClassFactoryVtbl DSCF_Vtbl =
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
unsigned int i;
- IClassFactoryImpl *factory;
-
+
TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
-
- if ( !IsEqualGUID( &IID_IClassFactory, riid )
- && ! IsEqualGUID( &IID_IUnknown, riid) )
- return E_NOINTERFACE;
- for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
+ if (IsEqualGUID( &IID_IClassFactory, riid ) || IsEqualGUID( &IID_IUnknown, riid))
{
- if (IsEqualGUID(object_creation[i].clsid, rclsid))
- break;
+ for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
+ {
+ if (IsEqualGUID(object_creation[i].clsid, rclsid))
+ {
+ IClassFactoryImpl *factory = CoTaskMemAlloc(sizeof(*factory));
+ if (factory == NULL) return E_OUTOFMEMORY;
+
+ factory->ITF_IClassFactory.lpVtbl = &DSCF_Vtbl;
+ factory->ref = 1;
+
+ factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
+
+ *ppv = &factory->ITF_IClassFactory;
+ return S_OK;
+ }
+ }
}
-
- if (i == sizeof(object_creation)/sizeof(object_creation[0]))
- {
- FIXME("%s: no class found.\n", debugstr_guid(rclsid));
- return CLASS_E_CLASSNOTAVAILABLE;
- }
-
- factory = CoTaskMemAlloc(sizeof(*factory));
- if (factory == NULL) return E_OUTOFMEMORY;
-
- factory->ITF_IClassFactory.lpVtbl = &DSCF_Vtbl;
- factory->ref = 1;
-
- factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
-
- *ppv = &(factory->ITF_IClassFactory);
- return S_OK;
+ return QUARTZ_DllGetClassObject( rclsid, riid, ppv );
}
/***********************************************************************
@@ -209,7 +199,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
*/
HRESULT WINAPI DllCanUnloadNow(void)
{
- return dll_ref != 0 ? S_FALSE : S_OK;
+ if (dll_ref) return S_FALSE;
+ return QUARTZ_DllCanUnloadNow();
}
@@ -225,6 +216,49 @@ static const struct {
{ { 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0} }, NULL }
};
+/***********************************************************************
+ * proxies
+ */
+HRESULT CALLBACK ICaptureGraphBuilder_FindInterface_Proxy( ICaptureGraphBuilder *This,
+ const GUID *pCategory,
+ IBaseFilter *pf,
+ REFIID riid,
+ void **ppint )
+{
+ return ICaptureGraphBuilder_RemoteFindInterface_Proxy( This, pCategory, pf,
+ riid, (IUnknown **)ppint );
+}
+
+HRESULT __RPC_STUB ICaptureGraphBuilder_FindInterface_Stub( ICaptureGraphBuilder *This,
+ const GUID *pCategory,
+ IBaseFilter *pf,
+ REFIID riid,
+ IUnknown **ppint )
+{
+ return ICaptureGraphBuilder_FindInterface( This, pCategory, pf, riid, (void **)ppint );
+}
+
+HRESULT CALLBACK ICaptureGraphBuilder2_FindInterface_Proxy( ICaptureGraphBuilder2 *This,
+ const GUID *pCategory,
+ const GUID *pType,
+ IBaseFilter *pf,
+ REFIID riid,
+ void **ppint )
+{
+ return ICaptureGraphBuilder2_RemoteFindInterface_Proxy( This, pCategory, pType,
+ pf, riid, (IUnknown **)ppint );
+}
+
+HRESULT __RPC_STUB ICaptureGraphBuilder2_FindInterface_Stub( ICaptureGraphBuilder2 *This,
+ const GUID *pCategory,
+ const GUID *pType,
+ IBaseFilter *pf,
+ REFIID riid,
+ IUnknown **ppint )
+{
+ return ICaptureGraphBuilder2_FindInterface( This, pCategory, pType, pf, riid, (void **)ppint );
+}
+
/***********************************************************************
* qzdebugstr_guid (internal)
*
diff --git a/reactos/dll/directx/quartz/mpegsplit.c b/reactos/dll/directx/quartz/mpegsplit.c
index 14d01a1590a..e44a10fcca1 100644
--- a/reactos/dll/directx/quartz/mpegsplit.c
+++ b/reactos/dll/directx/quartz/mpegsplit.c
@@ -202,20 +202,20 @@ static HRESULT FillBuffer(MPEGSplitterImpl *This, IMediaSample *pCurrentSample)
LONGLONG rtSampleStart = pin->rtNext - MEDIATIME_FROM_BYTES(4);
LONGLONG rtSampleStop = rtSampleStart + MEDIATIME_FROM_BYTES(length + 4);
- hr = IMemAllocator_GetBuffer(pin->pAlloc, &sample, NULL, NULL, 0);
-
if (rtSampleStop > pin->rtStop)
rtSampleStop = MEDIATIME_FROM_BYTES(ALIGNUP(BYTES_FROM_MEDIATIME(pin->rtStop), pin->cbAlign));
- IMediaSample_SetTime(sample, &rtSampleStart, &rtSampleStop);
- IMediaSample_SetPreroll(sample, 0);
- IMediaSample_SetDiscontinuity(sample, 0);
- IMediaSample_SetSyncPoint(sample, 1);
- pin->rtCurrent = rtSampleStart;
- pin->rtNext = rtSampleStop;
-
+ hr = IMemAllocator_GetBuffer(pin->pAlloc, &sample, NULL, NULL, 0);
if (SUCCEEDED(hr))
+ {
+ IMediaSample_SetTime(sample, &rtSampleStart, &rtSampleStop);
+ IMediaSample_SetPreroll(sample, 0);
+ IMediaSample_SetDiscontinuity(sample, 0);
+ IMediaSample_SetSyncPoint(sample, 1);
+ pin->rtCurrent = rtSampleStart;
+ pin->rtNext = rtSampleStop;
hr = IAsyncReader_Request(pin->pReader, sample, 0);
+ }
if (FAILED(hr))
FIXME("o_Ox%08x\n", hr);
}
diff --git a/reactos/dll/directx/quartz/nullrenderer.c b/reactos/dll/directx/quartz/nullrenderer.c
index f7740121eac..d2aedfa38f4 100644
--- a/reactos/dll/directx/quartz/nullrenderer.c
+++ b/reactos/dll/directx/quartz/nullrenderer.c
@@ -43,6 +43,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0};
+static const WCHAR wcsAltInputPinName[] = {'I','n',0};
static const IBaseFilterVtbl NullRenderer_Vtbl;
static const IUnknownVtbl IInner_VTable;
@@ -472,11 +473,17 @@ static HRESULT WINAPI NullRenderer_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin
TRACE("(%p/%p)->(%p,%p)\n", This, iface, debugstr_w(Id), ppPin);
- FIXME("NullRenderer::FindPin(...)\n");
+ if (!Id || !ppPin)
+ return E_POINTER;
- /* FIXME: critical section */
-
- return E_NOTIMPL;
+ if (!lstrcmpiW(Id,wcsInputPinName) || !lstrcmpiW(Id,wcsAltInputPinName))
+ {
+ *ppPin = (IPin *)This->pInputPin;
+ IPin_AddRef(*ppPin);
+ return S_OK;
+ }
+ *ppPin = NULL;
+ return VFW_E_NOT_FOUND;
}
static HRESULT WINAPI NullRenderer_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo)
diff --git a/reactos/dll/directx/quartz/quartz.rbuild b/reactos/dll/directx/quartz/quartz.rbuild
index 02e78a1cee2..982a73dd425 100644
--- a/reactos/dll/directx/quartz/quartz.rbuild
+++ b/reactos/dll/directx/quartz/quartz.rbuild
@@ -7,6 +7,10 @@
.
include/reactos/wine
0x600
+
+ QUARTZ_
+
+
wine
uuid
advapi32
@@ -21,6 +25,9 @@
msvfw32
msacm32
ntdll
+ quartz_proxy
+ rpcrt4
+ pseh
avidec.c
acmwrapper.c
waveparser.c
@@ -47,3 +54,10 @@
avisplit.c
version.rc
+
+
+ QUARTZ_
+
+
+ quartz_strmif.idl
+
\ No newline at end of file
diff --git a/reactos/dll/directx/quartz/quartz_strmif.idl b/reactos/dll/directx/quartz/quartz_strmif.idl
new file mode 100644
index 00000000000..aad62321f27
--- /dev/null
+++ b/reactos/dll/directx/quartz/quartz_strmif.idl
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2009 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* just a wrapper for strmif.idl */
+
+cpp_quote("#include ")
+#include "strmif.idl"
diff --git a/reactos/dll/directx/quartz/regsvr.c b/reactos/dll/directx/quartz/regsvr.c
index e7785c54307..cdb33d101c7 100644
--- a/reactos/dll/directx/quartz/regsvr.c
+++ b/reactos/dll/directx/quartz/regsvr.c
@@ -901,56 +901,6 @@ static struct regsvr_coclass const coclass_list[] = {
*/
static struct regsvr_interface const interface_list[] = {
- { &IID_IFilterGraph,
- "IFilterGraph",
- NULL,
- 11,
- NULL,
- &CLSID_PSFactoryBuffer
- },
- { &IID_IFilterGraph2,
- "IFilterGraph2",
- NULL,
- 21,
- NULL,
- &CLSID_PSFactoryBuffer
- },
- { &IID_IFilterMapper,
- "IFilterMapper",
- NULL,
- 11,
- NULL,
- &CLSID_PSFactoryBuffer
- },
- { &IID_IFilterMapper2,
- "IFilterMapper2",
- NULL,
- 7,
- NULL,
- &CLSID_PSFactoryBuffer
- },
- /* FIXME:
- { &IID_SeekingPassThru,
- "ISeekingPassThru",
- NULL,
- 4,
- NULL,
- &CLSID_PSFactoryBuffer
- },
- { &IID_AsyncReader,
- "IAsyncReader",
- NULL,
- 11,
- NULL,
- &CLSID_PSFactoryBuffer
- },
- { &IID_WAVEParser,
- "IWAVEParser",
- NULL,
- 11,
- NULL,
- &CLSID_PSFactoryBuffer
- },*/
{ NULL } /* list terminator */
};
@@ -1213,6 +1163,9 @@ static struct regsvr_filter const filter_list[] = {
{ NULL } /* list terminator */
};
+extern HRESULT WINAPI QUARTZ_DllRegisterServer(void) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI QUARTZ_DllUnregisterServer(void) DECLSPEC_HIDDEN;
+
/***********************************************************************
* DllRegisterServer (QUARTZ.@)
*/
@@ -1222,7 +1175,9 @@ HRESULT WINAPI DllRegisterServer(void)
TRACE("\n");
- hr = register_coclasses(coclass_list);
+ hr = QUARTZ_DllRegisterServer();
+ if (SUCCEEDED(hr))
+ hr = register_coclasses(coclass_list);
if (SUCCEEDED(hr))
hr = register_interfaces(interface_list);
if (SUCCEEDED(hr))
@@ -1252,5 +1207,7 @@ HRESULT WINAPI DllUnregisterServer(void)
hr = unregister_mediatypes_parsing(mediatype_parsing_list);
if (SUCCEEDED(hr))
hr = unregister_mediatypes_extension(mediatype_extension_list);
+ if (SUCCEEDED(hr))
+ hr = QUARTZ_DllUnregisterServer();
return hr;
}
diff --git a/reactos/include/dxsdk/axextend.idl b/reactos/include/dxsdk/axextend.idl
index a5174b8a3d5..27dd4db207f 100644
--- a/reactos/include/dxsdk/axextend.idl
+++ b/reactos/include/dxsdk/axextend.idl
@@ -266,7 +266,7 @@ interface IFilterMapper2 : IUnknown
HRESULT UnregisterFilter
( [in] const CLSID *pclsidCategory,
- [in] const OLECHAR *szInstance,
+ [in] LPCOLESTR szInstance,
[in] REFCLSID Filter
);
@@ -275,7 +275,7 @@ interface IFilterMapper2 : IUnknown
[in] LPCWSTR Name,
[in, out] IMoniker **ppMoniker,
[in] const CLSID *pclsidCategory,
- [in] const OLECHAR *szInstance,
+ [in] LPCOLESTR szInstance,
[in] const REGFILTER2 *prf2
);
@@ -317,7 +317,7 @@ typedef enum tagQualityMessageType
typedef struct tagQuality
{
QualityMessageType Type;
- long Proportion;
+ LONG Proportion;
REFERENCE_TIME Late;
REFERENCE_TIME TimeStamp;
} Quality;
@@ -482,7 +482,7 @@ pointer_default(unique)
interface IMediaEventSink : IUnknown
{
HRESULT Notify(
- [in] long EventCode,
+ [in] LONG EventCode,
[in] LONG_PTR EventParam1,
[in] LONG_PTR EventParam2
);
@@ -824,11 +824,11 @@ typedef enum tagVideoProcAmpFlags
]
interface IAMVideoProcAmp : IUnknown
{
- HRESULT GetRange( [in] long Property, [out] long *pMin, [out] long *pMax,
- [out] long *pSteppingDelta, [out] long *pDefault,
- [out] long *pCapsFlags);
- HRESULT Set( [in] long Property, [in] long lValue, [in] long Flags);
- HRESULT Get( [in] long Property, [out] long *lValue, [out] long *Flags);
+ HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax,
+ [out] LONG *pSteppingDelta, [out] LONG *pDefault,
+ [out] LONG *pCapsFlags);
+ HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags);
+ HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags);
}