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

我有一个旧的vb6应用程序,我负责维护,打开并将Word文档打印到用户计算机。有一天,当我们从办公室2003转到办公室2010时,我开始抱怨软件将不再打开保存的报告并打印出来。删除Officer 2010并安装2003可以解决问题。 处理此问题的子过程是所有vanilla msdn代码,我无法找到任何将它与某个版本的Word绑定的东西。我的下一个想法可能是它的OLE dll参考。在哪里/如何更新VB6对dll的引用以使用新版本的办公室? 任何其他建议将不胜感激。     
已邀请:
我不确定但是作为猜测听起来你正在尝试使用早期绑定。如果是这样,这可能是你的问题。 在过去十多年的时间里,有许多MS KB文章警告过这一点。例子: http://support.microsoft.com/kb/247579 http://support.microsoft.com/kb/245115 换句话说:删除对任何版本的Word的所有引用,声明所有对象
As Object
,并在适当的地方使用
CreateObject()
GetObject()
而不是
Set Obj = New LibName.ClassName
。 这些知识库文章现在已经过时了,旧的规则可以让您通过引用Word 95进行编译并仍然自动化Word 2002似乎不再适用。除了需要在您的开发机器上安装最旧的受支持版本的Office之外,我怀疑从Office 2003开始向上兼容性被破坏了。 你最好的选择是后期绑定。大多数程序的性能损失很小,因此最头痛的是失去了IntelliSense。     
如果你只是盲目地更新引用,你可能会破坏对Office 2003的支持。如果这不是问题,那就去吧。 如果是,你需要缩小范围,特别是应用程序失败。版本之间自动化模型的转速之间存在一些细微差别。不是很多,但他们在那里。 最有可能的是,代码正在以某种方式执行某些操作,使其特定于2003. MS在保持向后兼容方面做得非常好,但它们并非100%     
要回答您的问题“我在哪里/如何更新VB6对dll的引用以使用新版本的办公室?”:您当然需要安装了Office 2010和VB 6的计算机。如果在VB IDE中打开项目,则可以更改对相应Word库的引用。参考文献也在VBP文件中记录,例如,像这样
Type=Exe
Reference=*G{00020905-0000-0000-C000-000000000046}#8.0#409#C:Program FilesMicrosoft OfficeOFFICE11MSWORD.OLB#Microsoft Word 8.0 Object Library
Reference=*G{00025E01-0000-0000-C000-000000000046}#4.0#0#C:Program FilesCommon FilesMicrosoft SharedDAODAO350.DLL#Microsoft DAO 3.51 Object Library
Reference=*G{420B2830-E718-11CF-893D-00A0C9054228}#1.0#0#C:WINDOWSsystem32SCRRUN.DLL#Microsoft Scripting Runtime
然后重新编译。 好吧,如果你在那里,你可以开始调试,看看,详细情况会发生什么以及报告失败的原因。如果这是你的问题,没有重新编译就无法更改引用。 如果它是与打开,保存和打印相关的普通香草代码,很难想象出现问题。 另一方面 - 是否有使用Word格式的“基本文件”?可能是他们有一个旧的格式(从Office 95,最近才看到这个)。尝试手动打开这些文件,看看会发生什么。     

要回复问题请先登录注册