当我整理我的函数时,将string[]
作为UnmanagedType.Struct
与SafeArraySubType = VarEnum.VT_ARRAY
一起返回
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 Enumeration)
STRUCT
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[]
并将其手动编组为包含a的变体
安全的变种。
似乎SafeArraySubType
没有效果。我的错是什么?
答案 0 :(得分:0)
这是因为SafeArraySubType仅适用于SafeArrays。
MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]