我有一个.NET类,其中包含一个简单的字符串数组,可以通过一个访问方法使用,它看起来像这样:
namespace Foo.Bar {
[ComVisible(true)]
[Guid("642279A0-85D4-4c7a-AEF5-A9FAA4BE85E5")]
public class MyClass {
private string[] _myArray;
public MyClass() { }
public MyClass(string[] myArray) {
_myArray = myArray;
}
public string[] MyArray {
get { return _myArray; }
}
}
}
我使用经典ASP使用这个类;
Dim foo
Set foo = Server.CreateObject("Foo.Bar.MyClass")
if IsArray(foo.MyArray) then Response.Write("IsArray") & "<br />"
Response.Write(typename(foo.MyArray)) & "<br />"
Response.Write(UBound(foo.MyArray)) & "<br />"
这会导致:
IsArray
String()
1
然而,当我尝试使用以下方法访问数组的内容时:;
Response.Write(foo.MyArray(0)) & "<br />"
我遇到的问题:
Microsoft VBScript runtime (0x800A01C2) 参数数量错误或属性赋值无效:'MyArray'
非常感谢任何帮助。
编辑:在消化给出的答案后,提供更多信息。
当将 MyArray 属性的实现更改为:
public object[] MyArray {
get { return (object[])_myArray; }
}
我随后遇到了以下错误:
于是我尝试将每个字符串单独转换为对象;Microsoft VBScript runtime (0x800A000D) Type mismatch: 'MyArray'
public object[] MyArray {
get {
object[] tmp = new object[_myArray.Count()];
for (int x = 0; x < _myArray.Count(); x++) {
tmp[x] = (object)_myArray[x];
}
return tmp;
}
}
那么我回到了:
Microsoft VBScript运行时(0x800A01C2)参数错误或属性赋值无效:“MyArray”
编辑 最终的解决方案是在如何正确地将VB-Script数组从C#编写的COM组件封送到和帮助下完成的。
C#
public object MyArray {
get { return _myArray.Cast<object>().ToArray(); }
}
VBScript
Dim foo
Set foo = Server.CreateObject("Foo.Bar.MyClass")
bar = foo.MyArray
Response.Write bar(0)
关键在于暴露
对象
而不是对象[]
,正如AnthonyWJones所建议的,在使用之前将数组分配给变量。
再次感谢。