Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cocreateinstance成功后访问COM方法失败_C++_Visual Studio_Com - Fatal编程技术网

C++ cocreateinstance成功后访问COM方法失败

C++ cocreateinstance成功后访问COM方法失败,c++,visual-studio,com,C++,Visual Studio,Com,在成功的共同初始化和共同创建实例(COM服务器注册是完美的)之后。。当我访问类中的方法时,它返回错误: “XYZ.exe(OLEAUT32.DLL)中的首次偶然异常:0xC0000005:访问冲突” 通过逐步调试,我发现它在调用 // make the call SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags, &dispparams, pvarResult, &excepInfo, &nA

在成功的共同初始化和共同创建实例(COM服务器注册是完美的)之后。。当我访问类中的方法时,它返回错误: “XYZ.exe(OLEAUT32.DLL)中的首次偶然异常:0xC0000005:访问冲突”

通过逐步调试,我发现它在调用

// make the call
SCODE sc = m_lpDispatch->Invoke(dwDispID, IID_NULL, 0, wFlags, &dispparams, pvarResult, &excepInfo, &nArgErr);
在OLEDIST2.CPP文件中


请帮助

现在我可以想到以下检查:

  • 看看你是否有机会 调试并查看
    m\u lpDispatch
    。值是否为 正确?(非空)
  • 只是检查一下是否意外
    coninitialize()
    是否已被调用
  • 只需检查COM对象是否正确 是否正确计算引用

根据您的代码,唯一立即跳出的是m_lpDispatch可能为NULL或无效指针。该行中没有其他内容会导致访问冲突,因为它实际上不会访问任何内存

如果您可以确认m_lpDispatch确实是一个有效变量,那么可能是调用调用的方法导致了问题。如果是这样,那么您可能希望在VisualStudio中为访问冲突启用首次机会异常处理

  • 转到:
    Debug->Exceptions->Win32 Exceptions
  • 检查“访问冲突”
然后在调试器下运行您的场景。它将导致visual studio在访问冲突点中断。这将使实际问题更加明显

谢谢您抽出时间

问题在我这边解决了

问题在于将COM服务器的类型库(tlb)导入到我的客户端应用程序中。因此,对象会得到一个损坏的指针。当一个成员函数被调用时,它给出了访问错误

实际上我使用VisualC++应用程序中的“类向导”导入了类型库,如@ MSDNLink: 这实际上导致了上述问题

后来我通过使用simple#import“xyz.tlb”导入typelibrary找到了 它生成两个文件.tlh和.tli文件,其中还包含所有类和成员函数定义。 当我在我的项目中使用这些文件时,它起了作用

对不起打扰你了

谢谢和问候
Sandep r.

您确实需要显示更多导致此错误的代码。是的,可能是您分配的参数不正确,当Invoke尝试传递参数时,会导致AV。您可能希望“接受”此答案,因为它记录了问题的实际解决方式。。。