我知道大约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没有参数,那么事情就可以了......
任何人都知道如何解决这个问题?
感谢。
答案 0 :(得分:2)
它将是一个盒装短路,VB6整数是16位。此外,VB6中传递的默认参数是ByRef。将参数声明为 object 应该有效。它已经很久了,但我认为语法错了。它应该是
instance.DoIt 1
或
Call instance.DoIt(1)
请注意括号。没有理由这么做晚了。只要您的类是[ComVisible],它就会出现在类型库中,您只需声明VB6变量类型,以允许编译器检查您的代码并生成最佳调用。注册课程不是必要的。
Dim instance As MyClass
答案 1 :(得分:0)
通过将其声明为instance
来尝试延迟绑定到Object
。