首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++组件对象模型

C++组件对象模型
EN

Stack Overflow用户
提问于 2018-04-09 21:02:26
回答 1查看 178关注 0票数 1

我想用c++设置一个指向软件自动化调度的指针,我的代码是:

代码语言:javascript
复制
::CLSIDFromProgID(OLESTR("SGNSAutomation.SGNSApplication"), &clsid);
IID iid;

  HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, 
  IID_IDispatch, (LPVOID*)&pWMPDispatch);
  IDispatch * pdisp = (IDispatch *)NULL;
  DISPID dispid;
  OLECHAR * Name = OLESTR("openCase");
 HRESULT hresult =pdisp->GetIDsOfNames(IID_NULL, &Name,1,LOCALE_SYSTEM_DEFAULT,&dispid);

但在Win32Project1.exe: 0xC0000005:访问冲突读取位置0x00000000中的最后一行出现错误: 0x008B4AD7处的未处理异常。

我该如何解决这个问题呢?我想这是因为我没有设置pdisp指针,我不知道如何设置它。请帮帮我谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-04-09 23:52:09

您没有显示pWMPDispatch的声明,但我打赌它是一个IDispatch*。应该是这样的,因为您在CoCreateInstance调用中使用了IID_IDispatch。因此,您不需要另一个变量pdisp。只需使用pWMPDispatch即可。此外,请确保检查每个HRESULT返回代码。我认为你的代码应该是这样的

代码语言:javascript
复制
HRESULT hr = ::CLSIDFromProgID(OLESTR("SGNSAutomation.SGNSApplication"), &clsid);
if (FAILED(hr)) {
    // handle error here by returning or throwing
}

hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IDispatch, (LPVOID*) &pWMPDispatch);
if (FAILED(hr)) {
    // handle error here by returning or throwing
}

DISPID dispid;
LPOLESTR Name = OLESTR("openCase");
hr = pWMPDispatch->GetIDsOfNames(IID_NULL, &Name, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (FAILED(hr)) {
    // handle error here by returning or throwing
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49733640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档