【发布时间】: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