今天调试自己的程序,需要调用一个COM组件中的方法,利用GetIDsOfNames获取调用函数对象的DISPID。
GetIDsOfNames:
把COM接口的方法名字和参数(可选)映射成一组DISPID。
GetIDsOfNames(
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID *rgDispId)
代码片段如下:
DISPID PropertyID[1] = {0}; BSTR PropName[1]; PropName[0] = SysAllocString(L"ExtractString"); HRESULT hResult = lpDispatch->GetIDsOfNames(IID_NULL, PropName, 3, LOCALE_SYSTEM_DEFAULT, PropertyID); DWORD dRet = GetLastError();
运行结果:PropertyID 为 -1,GetLastError返回14007
查了查资料,终于找到原因了:COM组件未注册的缘故!
regsvr32 *.ocx即可!
时间: 2024-10-05 22:40:17