gpt4 book ai didi

asp.net - 使用经典 ASP 从 COM 对象中检索字符串数组

转载 作者:行者123 更新时间:2023-12-02 02:21:56 27 4
gpt4 key购买 nike

我有一个 .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; }
}
}
}

我使用 Classic 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) Wrong number of arguments or invalid property assignment: '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 runtime (0x800A01C2) Wrong number of arguments or invalid property assignment: 'MyArray'



编辑 最终解决方案在 How to correctly marshal VB-Script arrays to and from a COM component written in C# 的帮助下

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)

关键是要暴露 object而不是 object[]正如 AnthonyWJones 建议的那样,在使用数组之前将其分配给一个变量。

再次感谢。

最佳答案

问题是 VBScript 实际上不能使用 String 的数组.它只能使用 Variant 的数组.

尝试更改 MyClass暴露一个 object[]反而。

关于asp.net - 使用经典 ASP 从 COM 对象中检索字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729763/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com