Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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
Excel 2013访问冲突0xC0000005 我在一个C++软件中使用了Excel处理数据的老软件(2000年初)遇到了一个问题。它在以前版本的Excel中运行良好,但自2013版以来,我遇到了一次前所未有的崩溃_C++_Com_Access Violation_Excel 2013 - Fatal编程技术网

Excel 2013访问冲突0xC0000005 我在一个C++软件中使用了Excel处理数据的老软件(2000年初)遇到了一个问题。它在以前版本的Excel中运行良好,但自2013版以来,我遇到了一次前所未有的崩溃

Excel 2013访问冲突0xC0000005 我在一个C++软件中使用了Excel处理数据的老软件(2000年初)遇到了一个问题。它在以前版本的Excel中运行良好,但自2013版以来,我遇到了一次前所未有的崩溃,c++,com,access-violation,excel-2013,C++,Com,Access Violation,Excel 2013,我们已经为Excel创建了自己的COM外接程序,该外接程序已在regsvr32中注册,并可在Excel 2013中使用。加载项起初拒绝工作,但禁用数据执行预防(DEP)使其工作 通过在代码中创建Excel实例来访问此加载项: _Application.CreateDispatch ("Excel.Application"); 创建Excel实例后,我们从实例中获取加载的加载项,并通过循环COM加载项找到我们的加载项 _Application.GetCOMAddIns(); 获得外接程序后,我

我们已经为Excel创建了自己的COM外接程序,该外接程序已在regsvr32中注册,并可在Excel 2013中使用。加载项起初拒绝工作,但禁用数据执行预防(DEP)使其工作

通过在代码中创建Excel实例来访问此加载项:

_Application.CreateDispatch ("Excel.Application");
创建Excel实例后,我们从实例中获取加载的加载项,并通过循环COM加载项找到我们的加载项

_Application.GetCOMAddIns();
获得外接程序后,我们可以通过界面发送命令:

IExcelServer* server = excel.GetServerAddIn();      // Obtain the server COM-AddIn.
HRESULT result = server->Execute (&req, &rep, &retval);
我们可以在这里发送的命令之一是根据给定的字符串标签从Excel请求一个值(标签将在a列中,此函数返回同一行B列中的值)。现在代码在以下代码行崩溃:

rng.Find (COleVariant (label), CovOptional, CovOptional, COleVariant (xlWhole), CovOptional, xlSearchNext, CovOptional, CovOptional, CovOptional);
“rng”对象的类型范围是正确的表,范围从A1到A17。当我们从“rng”对象(rng.GetValue2())获取值时,它将为我们提供以下数组(其中包含label参数中指定的值):

变量的安全数组=[1,17](空,空,BSTR=0x160bc6bc“Web”,空,空,空,空,BSTR=0x0bbca5cc“Pre”,BSTR=0x15f499fc“WebStart”,BSTR=0x0bbca48c“WebMid”,BSTR=0x0bbca5a4“WebEnd”,BSTR=0x160bc80c“Post”,空,空,BSTR=0x15f49a24“SafeStartWeb”,BSTR=0x15f49a4c“SafeEndWeb”,空)

我们在调试时收到以下错误:

“Excel.exe中0x00ccbb4A处未处理的异常:0xC0000005:访问冲突读取位置0x00000000。”

每次Excel崩溃时,我们还会在windows事件查看器中看到以下消息:

“找不到源MSOIDSVC.EXE中事件ID 0的说明。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复该组件

如果事件起源于另一台计算机,则显示信息必须与事件一起保存

本次活动包括以下信息:

初始化VCAPI失败,hr=0x8004888d“

代码是在VS2010中用C++编写的,运行的是WiWOS7 x64。我们也在Windows8 x64机器上测试了代码,但得到了相同的结果

以前是否有人见过此崩溃,或者可以建议如何修复它?
提前感谢。

这种崩溃是由于错误检查不足造成的。在非常简短的片段中有大量证据证明了这一点。某种COM调用失败,您将得到一个空指针并取消对它的引用。卡布姆。当然,事件日志条目可能非常重要。@HansPassant我们如何改进错误检查?我们正在调用COM函数rng.Find(..)。Range类是Excel中的“机器生成的IDispatch包装器”。当我们调用函数Excel崩溃时,我们在调试过程中收到上面提到的错误。我们不会从调用中获得结果(如空指针)。