Excel 2013访问冲突0xC0000005

时间:2014-09-03 14:28:27

标签: c++ com access-violation excel-2013

我用C ++编写的旧软件(2000年初)存在问题,该软件使用Excel处理数据。它在之前的Excel版本中运行良好,但从2013版开始,我遇到了一个我以前从未见过的崩溃。

我们已经为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'对象的类型为Range,来自正确的工作表,范围从A1到A17。当我们从'rng'对象(rng.GetValue2())获取值时,它为我们提供了以下数组(其中包含label参数中指定的值):

VARIANT的安全阵列= [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的描述。引发此事件的组件未安装在本地计算机上或安装已损坏。您可以安装或修复组件本地电脑。

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

活动中包含以下信息:

InitializeSvcAPI失败,hr = 0x8004888d“

代码在VS2010中使用C ++并运行Windows7 x64。我们还在Windows8 x64机器上测试了代码,但结果相同。

有人在此之前看过这次崩溃,还是可以建议如何修复它? 提前谢谢。

0 个答案:

没有答案