在VB6应用程序中更新OLE引用

在VB6应用程序中更新OLE引用,vb6,ole,office-2010,Vb6,Ole,Office 2010,我有一个旧的vb6应用程序,我负责维护它,它可以将Word文档保存、打开并打印到用户的计算机上。前几天,当我们从Office2003切换到Office2010时,我开始收到投诉,说软件无法再打开保存的报表并打印它们。删除Officer 2010并安装2003修复了该问题 处理这个问题的子过程都是普通的msdn代码,我找不到任何能将它与Word的某个版本联系起来的东西。我的下一个想法可能是OLE dll引用。在哪里/如何更新对dll的VB6引用以使用新版本的office 如有任何其他建议,将不胜感

我有一个旧的vb6应用程序,我负责维护它,它可以将Word文档保存、打开并打印到用户的计算机上。前几天,当我们从Office2003切换到Office2010时,我开始收到投诉,说软件无法再打开保存的报表并打印它们。删除Officer 2010并安装2003修复了该问题

处理这个问题的子过程都是普通的msdn代码,我找不到任何能将它与Word的某个版本联系起来的东西。我的下一个想法可能是OLE dll引用。在哪里/如何更新对dll的VB6引用以使用新版本的office


如有任何其他建议,将不胜感激

如果盲目更新引用,很可能会破坏对Office 2003的支持。如果这不是问题,那就去做吧

如果是的话,你需要缩小应用程序失败的范围。不同版本之间的自动化模型版本之间存在一些细微的差异。不是很多,但是他们在那里

最有可能的是,代码正在以特定于2003年的方式执行某些操作。MS在维护向后兼容方面做得相当好,但它们不是100%回答您的问题“在哪里/如何更新dll的VB6引用以使用新版office?”:您当然需要安装office 2010和VB 6的计算机。如果在VB IDE中打开项目,则可以更改对相应单词库的引用。VBP文件中也会记录引用,例如

Type=Exe
Reference=*\G{00020905-0000-0000-C000-000000000046}#8.0#409#C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB#Microsoft Word 8.0 Object Library
Reference=*\G{00025E01-0000-0000-C000-000000000046}#4.0#0#C:\Program Files\Common Files\Microsoft Shared\DAO\DAO350.DLL#Microsoft DAO 3.51 Object Library
Reference=*\G{420B2830-E718-11CF-893D-00A0C9054228}#1.0#0#C:\WINDOWS\system32\SCRRUN.DLL#Microsoft Scripting Runtime
然后重新编译。 好的,如果你在那里,你可以开始调试,看看详细发生了什么,以及报告失败的原因。如果这是您的问题,那么不重新编译就无法更改引用

如果是与打开、保存和打印相关的普通代码,很难想象会出现什么问题


另一方面,是否有Word格式的“基本文件”被使用?可能是他们有一个旧的格式(来自Office 95,最近刚刚看到)。尝试手动打开这些文件,看看会发生什么

我不确定,但作为猜测,您似乎正在尝试使用早期绑定。如果是这样,这可能是你的问题

在十多年的时间里,有许多MS KB文章对此提出警告。示例:

换句话说:删除对Word任何版本的所有引用,将所有对象
声明为Object
,并在适当的情况下使用
CreateObject()
GetObject()
,而不是
Set Obj=New LibName.ClassName

这些知识库文章现在已经过时了,旧的规则让您可以通过引用Word 95进行编译,但仍然可以自动执行Word 2002,这些规则似乎不再适用了。除了需要在您的开发机器上安装受支持的最旧版本的Office之外,我怀疑从Office 2003开始,向上的兼容性就被破坏了

你最好的选择是晚绑定。对于大多数程序来说,性能损失是最小的,因此最大的头痛是失去智能感知