使用microsoft Office 2010生成的类型库是否可以在安装了Office 2013的计算机上运行?

时间:2014-11-30 10:25:59

标签: com ms-office ole

我有一个Visual c ++应用程序,它使用office COM组件上的导入来操作office文档。该app依赖于用户机器上安装的office版本。下面的示例是我所拥有的类型库头的一部分从我安装的办公室版本(2010)中为excel生成:

 // Created by Microsoft (R) C/C++ Compiler Version 10.00.40219.01 (e8ba858a).
//
// d:\play_ground\pimawordtopdf\release\excel.tlh
//
// C++ source equivalent of Win32 type library C:\\Program Files (x86)\\Microsoft      Office\\Office14\\EXCEL.EXE
// compiler-generated file created 11/26/14 at 09:02:55 - DO NOT EDIT!

//
// Cross-referenced type libraries:
//
//

#pragma once

这在我安装了Office 2007的其他测试机器上运行良好,但有些东西在使用Office 2013的机器上无法正常工作。我的问题是:微软办公室的类型库向后兼容,以便2010年生成的类型库适用于2007年。如果这是真的,我将不得不生成2013类型库并使用它们编译我的应用程序,以便它可以在2013年,2010年和2007年运行。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

是的,类型库是向后兼容的,直到您只使用所有Office版本中可用的类型,而不是最新版本的新成员。如果您尝试呼叫旧Office版本中遗漏的成员,您将收到例外。这就是为什么我建议使用最旧的类型库,例如,如果它是支持最小版本的Office 2007。如果需要,可以在运行时检查Office版本,如果代码是针对最新版本运行的,则可以调用新成员。

  

但有些东西在使用Office 2013的计算机上无法正常工作

请你更具体一点吗?你尝试调试代码了吗?你有任何例外吗?

最后,您可能会发现Office Automation Using Visual C++文章很有帮助。

答案 1 :(得分:0)

他们应该,但他们不应该。它是我们谈论的微软,因此他们可以做任何他们想要的事情。 他们确实破坏了COM接口,并且它不再向后兼容。 例如,如果您正在使用Shapes.AddMediaObject,那么您就会遇到麻烦,因为它已被弃用Shapes.AddMediaObject2

参考:https://msdn.microsoft.com/en-us/library/office/ff744080.aspx