成功完成coInitialize和cocreateinstance(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文件中的。
请帮助
答案 0 :(得分:1)
问题在我的最后解决了。
问题在于将COM服务器的类型库(tlb)导入到我的客户端应用程序中。因此,对象获得了损坏的指针。当调用成员函数时,它会给出ACCESS VOILATION错误。
我实际上使用“CLASS WIZARD”在我的Visual C ++应用程序中导入了类型库,如上所述@ MSDN链接: http://msdn.microsoft.com/en-us/library/aa279228(VS.60).aspx 这实际上导致了上述问题。
后来我通过使用简单的#import“xyz.tlb”导入typelibrary找到了 它生成两个文件.tlh和.tli文件,它们还包含所有类和成员函数定义。 当我在我的项目中使用这些文件时,它可以工作。
很抱歉打扰你......
感谢和问候 sandeep r。
答案 1 :(得分:0)
现在我可以考虑以下检查:
m_lpDispatch
。是否值
适当的?(不是NULL)CoUninitialize()
被称为?答案 2 :(得分:0)
根据您的代码,唯一立即跳出的是m_lpDispatch可能为NULL或无效指针。该行中的任何其他内容都不会导致访问冲突,因为它实际上不会访问任何内存。
如果你可以确认m_lpDispatch确实是一个有效的变量,那么它可能是Invoke调用的导致问题的方法。如果是这样,那么您可能希望为Visual Studio中的访问冲突启用第一次机会异常处理。
Debug -> Exceptions -> Win32 Exceptions
然后在调试器下运行您的场景。这将导致visual studio在访问冲突点处中断。这应该使实际问题更加明显。