VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了.net – 如何正确编排VB脚本数组与COM组件中编写的C#大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C#(.Net 4.0)中构建一个COM对象,用于一个经典的asp站点.现在我想知道在组件和asp站点之间来回传递VB脚本数组(单一和多维)的正确方法是什么?代码示例将被高度赞赏.
VBScript只喜欢处理包含VARIANTS的SAFEARRAY.而且它喜欢把这些在COM方法或属性中的变量放在VARIANTS中.因此,您需要构建一个包含VARIANT类型的SAFEARRAY的VARIANT属性.以下C#代码执行此操作.首先使用一个简单的对象数组,然后再显示我们可以将任何其他托管类型的数组转换成一个对象数组,以使编组代码将它转换成为我们的VARIANT的SAFEARRAY.
using System;
using System.Runtime.Interopservices;
using System.Linq;

namespace StackOverflow
{
    [ComVisible(true)]
    [Guid("2F4C19A6-9BB9-4ACF-90D1-BAF48696740A")]
    [InterfaCEType(ComInterfaCEType.InterfaceIsDual)]
    public interface IMyArrayDemo
    {
        [DispId(1)]
        int count
        {
            [return: MarshalAs(UnmanagedType.I4)]
            get;
        }
        [DispId(2)]
        object Data
        {
            [return: MarshalAs(UnmanagedType.Struct,SafeArraySubType = VarEnum.VT_ARRAY)]
            get;
        }
        [DispId(3)]
        object Names
        {
            [return: MarshalAs(UnmanagedType.Struct,SafeArraySubType = VarEnum.VT_ARRAY)]
            get;
        }
    }

    [ComVisible(true)]
    [Guid("7EF75834-22BE-4861-879B-EA0CE20E46E9")]
    [ClassInterface(ClassInterfaCEType.NonE)]
    [ProgId("StackOverflow.MyArrayDemo")]
    public class MyArrayDemo : IMyArrayDemo
    {
        object[] mData = new object[10] { 0,1,2,3,5,8,13,21,34 };
        String[] mnames = new String[5] {"one","two","three","four","five"};
        public int count { get { return mData.Length; } }
        public object Data { get { return mData; } }
        public object Names { get { return mnames.Cast<object>().ToArray(); } }
    }
}

这可以使用以下vbscript进行测试:

Option Explicit
Sub Main
  Dim o,v
  Set o = CreateObject("StackOverflow.MyArrayDemo")
  WScript.Echo "Count " & o.Count & " type: " & Typename(o.Data) & " names: " & Typename(o.Names)
  For Each v in o.Data : WScript.Echo CStr(v) : Next
  For Each v in o.Names : WScript.Echo v : Next
End Sub
Main

您可以看到这里报告的类型为Variant() – 即:一个变体数组.

C:\Users\pat>\windows\SysWOW64\cscript.exe -nologo arraytest.vbs
Count 10 type: Variant() names: Variant()
0
1
1
2
3
5
8
13
21
34
one
two
three
four
five

大佬总结

以上是大佬教程为你收集整理的.net – 如何正确编排VB脚本数组与COM组件中编写的C#全部内容,希望文章能够帮你解决.net – 如何正确编排VB脚本数组与COM组件中编写的C#所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。