我想为C++的软件自动化设置一个指向调度的指针
我的代码是:
::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中0x008B4AD7处未处理的异常:0xC0000005:访问冲突读取位置0x00000000。
我应该如何解决这个问题?
我认为这是因为我没有设置pdisp指针,也不知道如何设置它。
请帮我
谢谢
最佳答案
您没有显示pWMPDispatch
的声明,但我敢打赌这是IDispatch*
。应该是这样,因为您在IID_IDispatch
调用中使用了CoCreateInstance
。因此,您不需要其他变量pdisp
。只需使用pWMPDispatch
即可。另外,请确保检查每个HRESULT
返回码。我认为您的代码应该看起来像这样
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
}