我在Windows 7计算机上运行Visual Studio 2012。
当我运行此处的SimpleDirect2dApplication:http://technet.microsoft.com/en-us/subscriptions/dd940321%28v=vs.85%29.aspx
时 hr = CoCreateInstance(
CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&m_pWICFactory)
);
CoCreateInstance失败并显示“未注册类”且出厂的ptr为0。
任何帮助都将不胜感激。
答案 0 :(得分:0)
根据Microsoft论坛中的answer,Windows SDK 8.0中的重大更改要求您将_WIN32_WINNT
定义为0x0600
,以向后兼容Windows Vista或{{1} }以便与Windows 7向后兼容。
答案 1 :(得分:0)
这是我用来处理WIC和WIC2场景的WIC创建的代码:
this.MyBrowser.WebBrowser.ExecuteScriptAsyncWhenPageLoaded(@"(async function() {await CefSharp.BindObjectAsync('callbackObj', 'bound');})();");
这将处理从任何线程一次创建工厂的过程。您可以通过以下方式使用它:
namespace
{
bool g_WIC2 = false;
BOOL WINAPI InitializeWICFactory(PINIT_ONCE, PVOID, PVOID *ifactory) noexcept
{
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) || defined(_WIN7_PLATFORM_UPDATE)
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory2,
nullptr,
CLSCTX_INPROC_SERVER,
__uuidof(IWICImagingFactory2),
ifactory
);
if (SUCCEEDED(hr))
{
// WIC2 is available on Windows 10, Windows 8.x, and Windows 7 SP1 with KB 2670838 installed
g_WIC2 = true;
return TRUE;
}
else
{
hr = CoCreateInstance(
CLSID_WICImagingFactory1,
nullptr,
CLSCTX_INPROC_SERVER,
__uuidof(IWICImagingFactory),
ifactory
);
return SUCCEEDED(hr) ? TRUE : FALSE;
}
#else
return SUCCEEDED(CoCreateInstance(
CLSID_WICImagingFactory,
nullptr,
CLSCTX_INPROC_SERVER,
__uuidof(IWICImagingFactory),
ifactory)) ? TRUE : FALSE;
#endif
}
}
bool IsWIC2() noexcept
{
return g_WIC2;
}
IWICImagingFactory* GetWIC() noexcept
{
static INIT_ONCE s_initOnce = INIT_ONCE_STATIC_INIT;
IWICImagingFactory* factory = nullptr;
if (!InitOnceExecuteOnce(
&s_initOnce,
InitializeWICFactory,
nullptr,
reinterpret_cast<LPVOID*>(&factory)))
{
return nullptr;
}
return factory;
}
对于少数几个关心WIC与WIC2的情况,请使用auto pWIC = GetWIC();
if (!pWIC)
// error
:
IsWIC2
我过去曾使用C ++ 11 lambda编写此代码,但clang / LLVM不太喜欢它。
答案 2 :(得分:-2)
使用此
#if defined(CLSID_WICImagingFactory)
#undef CLSID_WICImagingFactory
#endif
然后你可以通过这个
参见: http://skia.googlecode.com/svn/trunk/src/ports/SkImageDecoder_WIC.cpp