来自(WIC)CoCreateInstance的E_INVALIDARG

时间:2017-06-10 09:34:47

标签: windows winapi direct2d

在尝试创建IWIC Factory时,CoCreateInstance函数返回E_INVALIDARG(一个或多个参数无效)。我检查了MSDN,但我看不出哪些参数可能无效。

IWICImagingFactory* iwicfactory = nullptr;

HRESULT IWFactHRes = CoCreateInstance(CLSID_WICImagingFactory, 
  NULL,
  CLSCTX_INPROC_SERVER, 
  IID_IWICImagingFactory, 
  (LPVOID*)iwicfactory
);

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

CoCreateInstance的最后一个参数是

  接收 riid 中请求的接口指针的指针变量的

地址

您的代码当前传递的是指针变量,而不是它的地址。你必须改变

(LPVOID*)iwicfactory

(LPVOID*)&iwicfactory

<小时/> 附加说明:

  • 最好使用IID_PPV_ARGS宏,以确保IID和界面指针同步,同时不再需要强制转换:

    HRESULT IWFactHRes = CoCreateInstance(CLSID_WICImagingFactory, 
      NULL,
      CLSCTX_INPROC_SERVER, 
      IID_PPV_ARGS(&iwicfactory)
    );
    
  • 在调用CoCreateInstance之前,需要在调用线程上初始化COM。致电CoInitializeCoInitializeEx即可。