需要VB6 .NET Interop对象

时间:2011-07-10 08:31:17

标签: .net vb6 interop com-interop

我知道大约6年前我解决了同样的问题...但我不记得这个诀窍是什么。

我有一个.NET类。它是COM可见的(但不是COM注册的)。它是作为调用COM注册类的结果返回的。所以我的VB6代码最终以

结束
Dim instance as Variant
' call .NET exposed tlb to set instance with a COM visible class
Dim wrapper as New ComWrapper  ' this is a .NET class COM exposed and registered
Set instance = wrapper.MyClassInstance ' MyClassInstance is an instance of COM visible, but not COM registered MyClass defined below
instance.DoIt 1

相关的类是MyClass

public class MyClass
{
    public void DoIt(int id) { ... }
}

调用instance.DoIt 1抛出异常“需要对象”。如果我没记错的话,它与整数1需要装箱或取消装箱或其他东西有关,VB6不会自动为你做...但我不记得如何解决它。 ..如果方法DoIt没有参数,那么事情就可以了......

任何人都知道如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:2)

它将是一个盒装短路,VB6整数是16位。此外,VB6中传递的默认参数是ByRef。将参数声明为 object 应该有效。它已经很久了,但我认为语法错了。它应该是

instance.DoIt 1

Call instance.DoIt(1)

请注意括号。没有理由这么做晚了。只要您的类是[ComVisible],它就会出现在类型库中,您只需声明VB6变量类型,以允许编译器检查您的代码并生成最佳调用。注册课程不是必要的。

Dim instance As MyClass

答案 1 :(得分:0)

通过将其声明为instance来尝试延迟绑定到Object