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 来执行此操作。
在尝试创建 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 来执行此操作。