当我将返回 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
A VARIANT, which is used to marshal managed formatted classes and value types.
然而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
没有效果。我的错误是什么?
最佳答案
那是因为 SafeArraySubType 仅适用于 SafeArray。
MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]
关于c# - 能否将 string[] 编码为 safearray 变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31433552/