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

时间:2011-04-08 18:22:40

标签: vb6 ole office-2010

我有一个旧的vb6应用程序,我负责维护,打开Word文档并将其打印到用户计算机。有一天,当我们从办公室2003转到办公室2010时,我开始抱怨软件将不再打开保存的报告并打印出来。删除Officer 2010并安装2003可以解决问题。

处理此问题的子程序是所有vanilla msdn代码,我无法找到任何将它与某个版本的Word绑定的东西。我的下一个想法可能是它的OLE dll参考。在哪里/如何更新VB6对dll的引用以使用新版本的办公室?

非常感谢任何其他建议。

3 个答案:

答案 0 :(得分:1)

我不确定,但是猜测听起来好像是在尝试使用早期绑定。如果是这样,这可能是你的问题。

在过去十多年的时间里,有许多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。

答案 1 :(得分:0)

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

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

最有可能的是,代码正在以一种特定于2003的方式执行某些操作.MS在保持向后兼容方面表现相当不错,但它们不是100%

答案 2 :(得分:0)

要回答您的问题“我在哪里/如何更新VB6对dll的引用以使用新版本的办公室?”:您当然需要安装了Office 2010和VB 6的计算机。如果在VB IDE中打开项目,则可以更改对相应Word库的引用。参考文献也在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,最近才看到这个)。尝试手动打开这些文件,看看会发生什么。