E_INVALIDARG 来自 (WIC) CoCreateInstance

E_INVALIDARG from (WIC) CoCreateInstance

在尝试创建 IWIC 工厂时,CoCreateInstance 函数返回 E_INVALIDARG(一个或多个参数无效)。我检查了 MSDN,但看不出这些参数中有哪些是无效的。

IWICImagingFactory* iwicfactory = nullptr;

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

我是不是漏掉了什么?

CoCreateInstance 的最后一个参数是

address of pointer variable that receives the interface pointer requested in riid.

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

(LPVOID*)iwicfactory

(LPVOID*)&iwicfactory


补充说明:

  • 使用 IID_PPV_ARGS 宏是个好主意,它可以确保 IID 和接口指针同步并消除强制转换的需要:

    HRESULT IWFactHRes = CoCreateInstance(CLSID_WICImagingFactory, 
      NULL,
      CLSCTX_INPROC_SERVER, 
      IID_PPV_ARGS(&iwicfactory)
    );
    
  • COM 需要在调用 CoCreateInstance 之前在调用线程上初始化。调用 CoInitialize or CoInitializeEx 来执行此操作。