gpt4 book ai didi

c# - 能否将 string[] 编码为 safearray 变体?

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:10 25 4
gpt4 key购买 nike

当我将返回 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" };
}
}
}

我期待得到一个变体 ( UnmanagedTypeEnumeration )

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com