windows-nt/Source/XPSP1/NT/shell/ext/media/wmwrap.cpp
2020-09-26 16:20:57 +08:00

63 lines
1.3 KiB
C++

#include "wmsdkidl.h"
#include "wmwrap.h"
// Some wmvcore.dll exports (eg: WMCreateReader) are not callable via LoadLibrary/GetProcAddress,
// so we can't use our regular dllload macros. Instead, we'll wrap these calls in try-except
// blocks.
// These may be removed once the window media player is part of the build, although the linker's
// delayload stubs will still throw exceptions in low memory situations.
HRESULT WMCreateEditorWrap(IWMMetadataEditor** ppEditor)
{
HRESULT hr;
// WMSDK suports only x86
#ifdef _X86_
__try
{
hr = WMCreateEditor(ppEditor);
}
__except(EXCEPTION_EXECUTE_HANDLER)
#endif
{
hr = E_FAIL;
*ppEditor = NULL;
}
return hr;
}
HRESULT WMCreateReaderWrap(IUnknown* pUnkReserved, DWORD dwRights, IWMReader** ppReader)
{
HRESULT hr;
// WMSDK suports only x86
#ifdef _X86_
__try
{
hr = WMCreateReader(pUnkReserved, dwRights, ppReader);
}
__except(EXCEPTION_EXECUTE_HANDLER)
#endif
{
hr = E_FAIL;
*ppReader = NULL;
}
return hr;
}
HRESULT WMCreateCertificateWrap(IUnknown** ppUnkCert)
{
HRESULT hr;
#ifdef _X86_
__try
{
hr = WMCreateCertificate(ppUnkCert);
}
__except(EXCEPTION_EXECUTE_HANDLER)
#endif
{
hr = E_FAIL;
*ppUnkCert = NULL;
}
return hr;
}