【问题标题】:E_INVALIDARG from (WIC) CoCreateInstance来自 (WIC) CoCreateInstance 的 E_INVALIDARG
【发布时间】:2017-11-12 07:08:01
【问题描述】:

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

IWICImagingFactory* iwicfactory = nullptr;

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

我错过了什么吗?

【问题讨论】:

  • (void**)&iwicfactory 必须是
  • 哦!我添加了 &,它似乎解决了这个问题。它现在说“未调用 CoInitialize”。不过,这可能是一个完全独立的问题。
  • 当然需要在CoCreateInstance之前调用CoInitialize
  • 啊,我没有意识到这一点。那我现在就去做。
  • 消息“未调用 CoInitialize”应该是您可能需要调用 CoInitialize 的线索。

标签: windows winapi direct2d


【解决方案1】:

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 进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多