【发布时间】:2015-10-04 16:18:43
【问题描述】:
当我编组我的函数返回 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)
结构
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 没有效果。我的错误是什么?
【问题讨论】:
标签: c# vbscript com-interop