不能将字符串[]封送为数组变体
本文关键字:数组 字符串 不能 | 更新日期: 2023-09-27 18:03:02
当我编组函数返回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)枚举)
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
没有效果。我错在哪里?
这是因为SafeArraySubType只适用于safearray。
MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]