You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C#的string[]正确封送到VBScript中?

解决方案

要解决VBScript能识别数组但无法访问元素的问题,必须在COM可见接口的属性定义上显式指定封送规则,而非仅在实现类中添加属性。

原因

COM互操作中,.NET原生的string[]封送逻辑无法让VBScript正确解析数组元素。需要明确告诉CLR将数组封送为SafeArray类型,且元素类型为VT_BSTR(COM标准字符串类型)。由于COM依赖接口元数据进行类型交互,这个封送属性必须定义在接口上,实现类无需额外标注。

修改后的接口代码

[Guid("25267107-CFD3-4A1B-8D94-639A7F189C0B"),
InterfaceType(ComInterfaceType.InterfaceIsDual),
ComVisible(true)]
public interface IComMethods : IDisposable
{
    [return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)]
    string[] Interlockings { get; }
}

实现类代码保持不变

public string[] Interlockings
{
    get
    {
        return new string[] { "abc", "def" };
    }
}

注意事项

修改接口后,需要重新注册程序集以更新COM元数据:

regasm.exe /codebase YourAssembly.dll

此时原VBScript代码无需修改,即可正常访问数组中的每个元素。

内容的提问来源于stack exchange,提问作者suriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:15:34