1

我有一个程序集,我设法使 VB6 可以看到它并且它可以工作,但是在用 VB5 完成同样的事情时遇到了问题。

对于 VB6,我已经构建了程序集,使其 COM 可见,将其注册为 COM 对象等,并且程序集显示在 VB6 的引用列表中,并允许我成功使用它。对象浏览器还显示组件中的方法。我将程序集及其 TLB 复制到用于 VB5 开发的虚拟工作站,然后运行 ​​Regasm,显然成功:

C:\>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
\regasm arserviceinterface.dll /tlb:arserviceinterface.tlb
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.3053
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Assembly exported to 'C:\Projects\AR\3rd Party\ARService\arserviceinterface.tlb'
, and the type library was registered successfully

请注意,虚拟 W/S 是 Win2k,上面没有 .NET Fx 3.5,只有 2.0。

该程序集显示在 VB5 中可以选择的引用中,但该程序集的方法未显示在对象浏览器中,并且通常无法使用。要么有一个我没有完成的步骤,要么 VB5 不知道如何使用这样的 COM 对象。请注意,VB5 安装程序位于虚拟工作站上,而不是安装 VB6 的同一工作站上。

有任何想法吗?我想到的一件事是我可能需要在有问题的工作站上生成和使用一个强名称,但是......

4

1 回答 1

4
  1. 确保您的程序集不是针对和使用 .Net 3.5 的功能构建的
  2. 复制 OLE/COM 对象查看器工具(您可以从安装了 Windows SDK 的机器上获取它)。运行它,转到查看所有对象,将列表向下滚动到您的对象,然后右键单击它以创建一个实例。
    2.1 如果OLE/COM Object Viewer 不能创建实例,问题在于对象是如何在机器上注册的,或者.Net 是如何安装的。
    2.2 如果OLE/COM Object Viewer 可以创建实例,那么问题就在于VB5 是如何消费的。
  3. 我不记得 VB5 是否真的支持早期绑定(IUnknown基于 - 的对象)或者是否只支持后期绑定(IDispatch)。我偷偷怀疑VB5 只支持调度接口,而正是VB5.5 引入了对IUnknown 的支持。所以这可能是你的问题。
于 2010-04-02T22:08:49.957 回答