首页 > 代码库 > VC++ : GetIDsOfNames 调用失败,获取的dispid为-1

VC++ : GetIDsOfNames 调用失败,获取的dispid为-1

  今天调试自己的程序,需要调用一个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即可!

 


  

VC++ : GetIDsOfNames 调用失败,获取的dispid为-1