能否将 string[] 编组为 safearray 变体?
Can on marshal a string[] to a safearray variant?
当我将我的函数 return 编组为 string[]
为 UnmanagedType.Struct
和 SafeArraySubType = VarEnum.VT_ARRAY
为
namespace Whosebug
{
[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
A VARIANT, which is used to marshal managed formatted classes and value types.
然而 VBScript 代码
WScript.Echo TypeName(CreateObject("Whosebug.Array").StringArray)
报告 String()
(这不是 Variant()
,因此我将得到类型
稍后访问数组时出现不匹配错误。
当我将代码更改为
public object[] ObjectArray()
{
return new object[] { "foo", "bar" };
}
public object PlainObject()
{
return new object[] { "foo", "bar" };
}
VBScript 代码似乎工作正常,但我想知道为什么我不能 return a string[]
并手动将其编组为包含 a 的变体
变体的安全数组。
看来SafeArraySubType
没有效果。我的错误是什么?
那是因为 SafeArraySubType 仅适用于 SafeArray。
MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]
当我将我的函数 return 编组为 string[]
为 UnmanagedType.Struct
和 SafeArraySubType = VarEnum.VT_ARRAY
为
namespace Whosebug
{
[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
A VARIANT, which is used to marshal managed formatted classes and value types.
然而 VBScript 代码
WScript.Echo TypeName(CreateObject("Whosebug.Array").StringArray)
报告 String()
(这不是 Variant()
,因此我将得到类型
稍后访问数组时出现不匹配错误。
当我将代码更改为
public object[] ObjectArray()
{
return new object[] { "foo", "bar" };
}
public object PlainObject()
{
return new object[] { "foo", "bar" };
}
VBScript 代码似乎工作正常,但我想知道为什么我不能 return a string[]
并手动将其编组为包含 a 的变体
变体的安全数组。
看来SafeArraySubType
没有效果。我的错误是什么?
那是因为 SafeArraySubType 仅适用于 SafeArray。
MarshalAs (UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)]