我遇到了COM组件可见的问题,并且调用了VB6中的某些方法。 我发现的是,如果参数是明确定义的类型(例如字符串),则调用工作正常。如果它们是更高级别的对象,则会引发运行时错误“438”,表明属性或方法不存在。我怀疑这是一个在呼叫中拥有正确签名的问题,但我无法看到如何正确执行此操作。在VB6中,如何调用需要指向对象的指针的COM对象?
我相信我已经在.NET方面做了一切正确的事情(ComVisible,公共接口等,甚至把它放在一个简单的例子中)。从类型库查看器的输出
看,我有以下几点:
dispinterface ISimple {
properties:
methods:
[id(0x60020000)]
void Add([in] ISimpleMember* member);
[id(0x60020001)]
ISimpleMember* Create();
};
确定。所以我在我的ISimple接口中有两种方法。一个需要一个ISimpleMember(Add),而另一个则返回一个ISimpleMember。
VB中的相应代码如下所示:
Dim item As ISimpleMember
Dim simple As simple
Set item = New SimpleMember
item.S1 = "Hello"
item.S2 = "World"
Set simple = New simple
simple.Add (item) <---- This raised the run time error 438
Set item = simple.Create <---- This works fine, returning me an ISimpleMember
我已经试过几件事情:1。 昏暗的项目作为SimpleMember(没有区别) 2. simple.Add(ObjPtr(项)) - 语法错误 3. simple.Add(为ByRef项目) - 语法错误
基本上,运行时间错误是一样的,如果我有 simple.AMethodThatIHaventWritten()
还有,如果我浏览在VB6环境引用,Add方法是明确界定:
减少添加(成员作为SimpleMember)
您是否从下面的代码中看到了这个想法? :-) – ichiban 2009-06-04 22:56:05