【问题标题】:public class members seemingly unavailable in VB6 IDE公共类成员在 VB6 IDE 中似乎不可用
【发布时间】:2011-04-13 07:36:36
【问题描述】:

我创建了一个 .net 程序集,其中包含 WCF (win32) 服务的数据协定。然后,我通过 COM 互操作公开了这些对象,以便可以在客户端重新使用相同的程序集来调用 WCF 服务。我的项目有以下内容:

[wcf 服务] { [通过 COM 互操作公开的 wcf 客户端程序集] + [也通过 com 互操作公开的数据协定程序集] } [vb 6 应用程序]

数据契约中的一个类示例如下:


[Guid("00000000-0000-0000-0000-000000000000")]
[ComVisible(true)]
[DataContract]
public sealed class Monkey { 
  public string name;
};

而且,大多数情况下,它工作得很好。我能够编译包含此类的 .net 程序集,将其注册为 COM 互操作,在 VB6 项目中引用它,并从客户端应用程序调用 WCF 服务。

这是奇怪的行为:它在 VB6 IDE 对象浏览器中显示类 Monkey,但不显示像 Monkey.name 这样的成员。

我相信这是由在 .net 程序集项目中导致以下编译时警告的同一件事引起的:

类型库导出器警告处理“MyCompany.Product.Contracts,MyCompany.Product.API”。警告:类型库导出器遇到了派生自泛型类且未标记为 [ClassInterface(ClassInterfaceType.None)] 的类型。不能为此类类型公开类接口。考虑使用 [ClassInterface(ClassInterfaceType.None)] 标记类型,并使用 ComDefaultInterface 属性将显式接口公开为 COM 的默认接口。

最后,我认为开发客户端应用程序时出现警告和奇怪行为的原因是因为我使用了自动生成的服务引用和继承自 System.ServiceModel.ClientBase<T> 的客户端对象.

  1. 我在正确的轨道上吗?

  2. 如何解决此问题/警告?

【问题讨论】:

    标签: c# wcf generics vb6 com-interop


    【解决方案1】:

    解决此问题的常用方法是创建一个由您的类实现的 ComVisible 接口 IMonkey。

    结果将类似于this similar question 中的示例。

    【讨论】:

    • 应该有类似问题的链接吗?
    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2018-11-24
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多