【问题标题】:Which properties are necessary for a class to be accepted by a VB6 Controls collection?VB6 控件集合接受一个类需要哪些属性?
【发布时间】:2012-04-12 04:52:52
【问题描述】:

我有一个用 vb.net 编写的用于 VB6 程序的 winforms 控件。该控件被动态添加到 VB6 控件控件集合中。

Set ctrlVB6 = Controls.Add("NETNamespace.SelVB6", "SelNet")

如果 .net 类 (SelVB6) 具有所有必要的属性,则 Add 方法返回 VB6 控件包装器并且控件是可见的。否则 Add 方法不返回任何内容,并且控件在 VB6 中不可用。
.net 类派生自System.Windows.Forms.UserControl,(幸运的是)它具有所有必需的属性。 .net 类用ClassInterface 属性修饰,以保证COM 可以使用这些属性。

<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class SelVB6

一切正常,但并非System.Windows.Forms.UserControl 的所有属性都是com 可见的,并且在VS2010 中会生成大量警告。为了摆脱警告,我需要知道哪些属性是必需的,定义一个接口并使用ClassInterfaceType.None

注意事项

我不允许使用Interop Forms Toolkit
我知道我可以列出控件属性Control Properties in Visual Basic 6

警告示例:

Type library exporter warning processing 'NETNamespace.SelVB6.PreProcessControlMessage(#0)'. Warning: Non COM visible value type 'System.Windows.Forms.PreProcessControlState' is being referenced either from the type currently being exported or from one of its base types. Microsoft.Common.targets

【问题讨论】:

  • 不仅是使其成为控件的属性,它还派生自 Control 类之一。修复未显示的属性和警告取决于实际警告的内容。
  • 我认为 vb6 over com 不会评估 .net 继承。我添加了警告示例。
  • 这些警告是正常的,大多数 .NET 对象不会暴露给 COM,只有那些需要实际实现正确接口的对象。
  • 是的,我知道它们是正常的。而且一切正常。但我不喜欢他们。因此,我正在寻找一种将非 COM 可见属性排除在界面之外的方法。所以我需要知道接口应该包含的最小属性集。

标签: .net visual-studio com vb6 vb6-migration


【解决方案1】:

只需将警告复制出来并将它们放入 Notepad++ 之类的东西中。然后,您可以快速创建一个宏并将其过滤掉,以便隔离所有需要声明的函数。然后快速声明它们。

【讨论】:

  • 问题是我使用的是ClassInterfaceType.AutoDual,并且类派生自System.Windows.Forms.UserControl。缺点是关于我不想被声明的函数。我正在寻找那些必要的。
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多