当我使用
VBScript代码似乎运行良好,但我想知道为什么我不能返回一个
看起来
SafeArraySubType = VarEnum.VT_ARRAY
将返回string[]
的函数编排为UnmanagedType.Struct
时,如下所示:namespace StackOverflow
{
[ComVisible(true)]
[Guid("4BDC43D4-8FD7-4F58-BEE5-E57C3C144C1B")]
public class Array
{
[return: MarshalAs(UnmanagedType.Struct, SafeArraySubType = VarEnum.VT_ARRAY)]
public string[] StringArray()
{
return new string[] { "foo", "bar" };
}
}
}
我原本期望得到一个变体(UnmanagedType 枚举)。
结构体
一个 VARIANT,用于编组托管格式的类和值类型。
然而 VBScript 代码
WScript.Echo TypeName(CreateObject("StackOverflow.Array").StringArray)
报告 String()
(它不是一个 Variant()
,因此当访问数组时将会出现类型不匹配错误)。
当我将代码更改为以下任意一种:
public object[] ObjectArray()
{
return new object[] { "foo", "bar" };
}
public object PlainObject()
{
return new object[] { "foo", "bar" };
}
VBScript代码似乎运行良好,但我想知道为什么我不能返回一个
string []
并手动将其封送到包含变量安全数组的变量中。看起来
SafeArraySubType
没有效果。我的错误在哪里?