使用C#或VB.NET创建用于脚本编写的COM组件

使用C#或VB.NET创建用于脚本编写的COM组件,c#,class,vbscript,com,interop,C#,Class,Vbscript,Com,Interop,我想在VBScript中使用COM组件,如下所示 Dim Object1 set Object1 = CreateObject("assembly.classname") Object1(argument1, argument2,...).ChildObject(arg1,arg2,...).Method (arg1,arg2,arg3) 如何为COM设计C#类库,以便在VBScript中调用上述组件 我可以创建C#组件并导出到COM,还可以在VBScript中使用简单的方法..比如 Di

我想在VBScript中使用COM组件,如下所示

Dim Object1

set Object1 = CreateObject("assembly.classname")

Object1(argument1, argument2,...).ChildObject(arg1,arg2,...).Method (arg1,arg2,arg3)
如何为COM设计C#类库,以便在VBScript中调用上述组件

我可以创建C#组件并导出到COM,还可以在VBScript中使用简单的方法..比如

Dim o: set o = Createobject("assembly.class"): msgbox o.method1(arg1)
但挑战如下

a) 父对象接受未知数量的参数(c#中的参数)

b) 父对象通过其名称直接调用(不像object.method或object.Property那样调用)

我在下面尝试了几种方法,但由于COM和.NET互操作性问题而未能成功

  • 我尝试在C#中使用重载构造函数,但COM不支持带参数的构造函数
  • 我尝试使用重载方法,但COM不支持带有param数组的重载函数
  • 我试图创建一个带有参数的默认属性,但它也不支持paramarray
  • 我们可以在C++的.NET中创建C++组件(uncom)并使用它。 如何设计我的类、类集合或类数组或任何其他设计,以从VBScript实现上述样式调用。 任何帮助都将不胜感激


    非常感谢。

    Param阵列是.NET功能,不是COM功能,也不是VBScript功能。你做不到这一点。只有object[]参数是一个选项,但肯定不会提供您喜欢的vbs语法。遗憾的是,无法使用vbs/VBA paramarry(声明MIDL属性vararg)。可能是因为VBS/VBA通过引用传递paramarray参数(当然实际上是1个参数)。您可以在vbs侧调用o.method(array(1,“2”,3.0,somethingelse))上将参数包装到数组中。只需如下声明封送处理[Marshallas(UnmanagedType.SafeArray,SafeArraySubType=VarEnum.VT_VARIANT)]对象[]fooParam数组是.NET功能,不是COM功能,也不是VBScript功能。你做不到这一点。只有object[]参数是一个选项,但肯定不会提供您喜欢的vbs语法。遗憾的是,无法使用vbs/VBA paramarry(声明MIDL属性vararg)。可能是因为VBS/VBA通过引用传递paramarray参数(当然实际上是1个参数)。您可以在vbs侧调用o.method(array(1,“2”,3.0,somethingelse))上将参数包装到数组中。只需按如下方式声明封送处理[Marshallas(UnmanagedType.SafeArray,SafeArraySubType=VarEnum.VT_VARIANT)]对象[]foo