C ++,OLE,Excel自动化:EAccessviolation在00000800

我正在写一个后台服务应用程序,必须自动从Excel 2003文件中读取数据。 但是无论我尝试什么,尝试从地址“00000800”读取时OlePropertyGet()方法总是会导致EAccessViolation错误。

该错误总是发生在这个代码片段的最后一行,而且似乎独立于该方法接收的参数:

Variant excel, workbooks; try { excel = GetActiveOleObject("Excel.Application"); } catch(...) { excel = CreateOleObject("Excel.Application"); } workbooks = excel.OlePropertyGet("Workbooks"); 

我已经做了一些广泛的谷歌search,但没有发现什么,甚至是远程有帮助的,只有这个论坛主题有人有同样的问题,但没有给出任何有关的原因或解决scheme的信息(有点有趣的是,在一个点作者提到他知道原因,但并不是说它是什么!)。

我打开任何想法是什么导致这个问题,以及如何解决这个问题,但也是Excel OLE自动化的替代方法。

我的猜测是它的空指针问题..

它看起来像GetActiveOleObject()CreateOleObject()工作。

尝试在调用OlePropertyGet之前OlePropertyGet “excel”的有效性。

我想你应该确保你已经安装了Excel。

您可以使用Office的Visual Studio工具(请参阅http://msdn.microsoft.com/en-us/library/d2tx7z6d.aspx )。

或者您可以使用ATL支持来实例化办公室提供的对象模型。

您的代码可能无法成功parsing“Excel.Application”,导致空指针。 它使用该string的registry查找来识别Excel。 这听起来像你错过了registry项。

我使用这样的代码来确定创build对象的有效性(在C ++ Builder中):

 Varaint excel = GetActiveOleObject("Excel.Application"); TAutoDriver<IDispatch> dispatcher; dispatcher.Bind(excel, false); if (dispatcher.IsBound()) { Variant workbooks = excel.OlePropertyGet("Workbooks"); }