为什么在我的32位应用程序中使用WIC在Windows 7 32位中失败?

yms*_*yms 3 winapi wic visual-studio visual-c++ windows-7

我有在Visual Studio Pro 2012 Update 2 中使用Windows Image Component的 Win32 C++示例应用程序.我为X86构建了此应用程序,并在Windows 7 X64 SP1和Windows 7 X86 SP1中进行了测试.它与第一个一起工作正常,并且在后面的"未注册类"时失败.

如果我使用VS2008构建相同的代码,它可以正常工作.

WIC实例在示例应用程序中创建,如下所示:

#include "wincodec.h"
...
case WM_CREATE:
{
IWICImagingFactory *m_pIWICFactory;  
HRESULT hr = S_OK;

CoInitialize(NULL);
// create WIC factory (m_pIWICFactory)
hr = CoCreateInstance(
    &CLSID_WICImagingFactory,
    NULL,
    CLSCTX_INPROC_SERVER,
    &IID_IWICImagingFactory, 
    &m_pIWICFactory);
if (!SUCCEEDED(hr))
    MessageBox(NULL, 
        L"CoCreateInstance(..IID_IWICImagingFactory..) failed!", 
        L"", MB_OK);
else
    MessageBox(NULL, 
        L"CoCreateInstance(..IID_IWICImagingFactory..) succeeded!", 
        L"", MB_OK);

CoUninitialize();
}
break;
...
Run Code Online (Sandbox Code Playgroud)

我能做错什么?

Rog*_*and 6

VS2012中存在重大变化,因为它默认情况下面向Windows 8.

解决方案是指定CLSID_WICImagingFactory1instaed,CLSID_WICImagingFactory因为后者解析为CLSID_WICImagingFactory2,在Windows 7中不存在.

所以试试吧

hr = CoCreateInstance(&CLSID_WICImagingFactory1, NULL, CLSCTX_INPROC_SERVER,
         &IID_IWICImagingFactory, &m_pIWICFactory);
Run Code Online (Sandbox Code Playgroud)