我有一个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年运行。
感谢您的时间。
答案 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