0

我需要在我的 VB6 开发项目中使用对 Microsoft Word 97 的引用。(说来话长——简而言之,如果我使用对 MSWord97 的引用,那么我可以支持 Word 97+)。

我在我的开发机器上使用 Microsoft Word 2007。理想情况下,如果我能侥幸不安装 Word97,那就太好了。

在 VB6 中,我尝试设置对 C:\Software\Microsoft\Office97Pro\OFFICE\mso97.dll 的引用(软件路径 - 未安装),但这不起作用。然后我尝试了 regsvr32 mso97.dll 但这给了我错误:已加载 mso97.dll,但找不到 DllRegisterServer 入口点。

任何人都知道我需要做什么才能让它工作吗?或者我需要在我的机器上安装 Word 97 才能正常工作吗?

4

2 回答 2

0

添加对项目的引用时,查找MS Word x.0 Object Libraryx 是您要使用的 MS Word 版本的位置。我相信您可以参考比 Word 2007(12.0 版)更低的版本。寻找 8.0。

于 2012-08-22T22:48:41.573 回答
0

听起来您基本上想要按照为多个 Office 版本编写自动化客户端中的建议进行操作,但忽略了有关使用后期绑定的建议。

涉及的类型库是 MSWORD8.OLB,但我不记得是否有任何合法的方法可以在没有 Word 97 或包含 Word 的 Office 97 版本的情况下获得它。我也不确定注册此 tylepib 对您的 Word 2007 安装有何影响,因为它们可能共享许多 ClassID 值。

在 VC++ 文章PRB:Automation of Office Using #import Can Fail if Multiple Versions of Office Are Installed 中,微软似乎暗示这可能是一个可行的策略,只要您引用正确的 OLB。这对于 VB6 来说可能比在 C++ 中的问题要少,因为 VB6 不使用 VC++ #import 语义来定位类型库。再一次,他们可能指的是运行时行为,因为解释的结论是再次建议后期绑定。

文章WD: How to Get the Word for Windows Type Library提供了 Word 6 和 Word 7 类型库的链接(链接可能不再有效),但没有针对 Word 97 的链接,他们建议您通过安装 Word 97 来获取。

无论如何,使用 Word 97 中的常量、枚举等听起来很安全,并对所有对象使用后期绑定。这个“半条面包”总比没有好。您仍然可以使用早期绑定声明进行初始开发以获得“智能感知”帮助,然后返回并将所有早期绑定对象声明更改为后期绑定As Object并替换Set X = New TYPE为相应的后期绑定CreateObject()调用,留下实际的强键入作为尾随注释。还可以使用条件编译#If/#Else块使稍后更容易返回到早期绑定。

由于今天可能无法合法获取 MSWORD8.OLB,您也可以考虑关闭:“Visual Basic for Applications 中的内置常量”(WC0993),它提供了包含 VB .BAS 模块的下载,该模块定义了许多旧版本 Word 和其他 Office 应用程序。下载链接有效 - 至少现在!

由于命名常量是类型库的主要原因(考虑到只有后期绑定才是真正安全的),这可能不是一个糟糕的折衷方案。您可以获取所需的 .BAS 文件,对其进行清理(其中肯定有一些缺陷),甚至可以将其转换为仅包含这些常量和枚举的自定义“通用字”TLB。就此而言,可能有人已经完成了这项工作。不过,我建议您在编写自己的“VB .BAS to ODL/IDL”编译器之前尝试一些搜索。

于 2012-08-23T08:33:46.963 回答