【发布时间】:2012-12-29 03:42:43
【问题描述】:
我有两个通过 COM 互操作公开的 .NET 类 - 比如说 Foo 和 Bar,我需要将 Foo 类型的参数传递给 Bar 中定义的方法。像这样的:
[ComVisible(true)]
public class Foo
{
// whatever
}
[ComVisible(true)]
public class Bar
{
public void Method(Foo fff)
{
// do something with fff
}
}
当我运行以下 VBS(使用 cscript.exe)时:
set foo = CreateObject("TestCSProject.Foo")
set bar = CreateObject("TestCSProject.Bar")
call bar.Method(foo)
我得到一个错误:
D:\test.vbs(3, 1) Microsoft VBScript runtime error: Invalid procedure call or argument: 'bar.Method'
但是,如果我将方法声明更改为:
public void Method(object o)
{
Foo fff = (Foo)o;
// do something with fff
}
一切正常。我尝试了一些关于接口、属性等的魔法,但到目前为止没有运气。
有什么见解吗?
非常感谢
【问题讨论】:
-
它应该像发布的那样工作,VBScript 使用后期绑定。尝试改进您的 sn-p 以创建一个以同样方式失败的示例。
-
@Hans - 我添加了失败的 VBS sn-p。从真实代码中复制/粘贴的所有内容。谢谢
标签: c# .net com com-interop