【问题标题】:Can type libraries generated with microsoft office 2010 work on a machine with office 2013 installed?使用 microsoft office 2010 生成的类型库可以在安装了 office 2013 的机器上工作吗?
【发布时间】:2015-01-28 12:06:36
【问题描述】:

我有一个 Visual c++ 应用程序,它使用 office COM 组件上的导入来操作 office 文档。该应用程序依赖于用户机器上安装的 office 版本。下面的示例是我拥有的类型库标题的一部分从我安装的 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 的机器上无法正常工作。我的问题是:microsoft office 的类型库是否向后兼容,以便使用 2010 生成的类型库适用于 2007 年。如果这是真的,我将不得不生成 2013 年类型库并用它们编译我的应用程序,以便它适用于 2013 年、2010 年和 2007 年。

感谢您的宝贵时间。

【问题讨论】:

  • 这不是类型库,只是 类型库自动生成的 .tlh 文件。与 .tli 文件(自动生成的包装函数)一起,它使 COM 编程变得更加容易。 COM 对象自动化模型已经兼容超过 16 年。相当了不起,但裂缝开始发展。当然它是向后兼容性,你不能指望2010年添加的接口方法在2007年可以工作。只有记录你的特定才能得到有用的答案i> 问题。

标签: com ms-office ole


【解决方案1】:

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

但有些东西在装有 office 2013 的机器上无法正常工作

你能说得更具体一点吗?您是否尝试调试代码?你有任何例外吗?

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

【讨论】:

    【解决方案2】:

    他们应该,但他们没有。我们谈论的是微软,所以他们可以为所欲为。 他们确实破坏了该 COM 接口,并且不再向后兼容。 例如,如果您使用的是 Shapes.AddMediaObject,那么您就有麻烦了,因为它已被弃用 Shapes.AddMediaObject2

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

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2011-08-28
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多