【问题标题】:Calling COM in C# from VBScript with Array从带有数组的 VBScript 调用 C# 中的 COM
【发布时间】:2012-04-08 10:03:21
【问题描述】:

在第一个字符串示例中,从 VBScript 调用用 C# 编写的 COM 函数是可以的。

    public bool IsEqualTo(string firstString, string SecondString)
    {

    bool areEqual = String.Equals(firstString, SecondString, StringComparison.Ordinal);

    if (areEqual){

    return true;

    }

    else return false;

    }

VBScript: MsgBox oTestCom.IsEqualTo(one,one)

不确定如何在第二个示例中传递和操作数组。使用 Array、ArrayList 还是 Object 最好?

public Array SortAscending (Array firstArray)

{
firstArray.Sort;

return firstArray;

}


VBScript: arrout = oTestCom.SortAscending("car","plane","boat")

【问题讨论】:

    标签: c# com vbscript


    【解决方案1】:

    在 C# 中,使用 object 作为数组参数类型。在 VBScript 中,使用 Array 函数构造数组。这是一个例子:

    C#代码:

    using System;
    using System.Linq;
    using System.Runtime.InteropServices;
    
    namespace MySampleComX
    {
        [ComVisible(true)]
        public class Class1
        {
            public void SortIntArray(ref object array)
            {
                if (array.GetType() != typeof(object[])) 
                {
                    throw new ArgumentException("Argument must be an array of integers");
                }
                array = ((object[]) array).OrderBy(Convert.ToInt32).ToArray();
            }
        }
    }
    

    VBScript 代码:

    Set obj = CreateObject("MySampleComX.Class1")
    arr = Array(3, 1, 2)
    obj.SortIntArray arr
    MsgBox Join(arr)  ' Outputs "1 2 3"
    

    【讨论】:

    • 输出是“3 1 2”,所以不确定调用或函数是否有效。
    【解决方案2】:

    请试试这个,我试试可以工作

    C#代码

       public object[] TestAray(ref object array)
       {
                   
              if (array.GetType() != typeof(object[]))
              {
                  throw new ArgumentException("Argument must be an array of integers");
              }
              var StrArray = ((object[])array).Cast<string>().ToArray();
              string[] res = StrArray;
                       
        
              for (int i = 0; i < res.Length; i++)
              {
                  string tids;
                  tids = Convert.ToString(res[i]);                  
               }        
        }
    

    VBScript 代码

    set obj=createObject("JustLib.TP_RateSchedules")
    dim a
    a=Array("5","10","15","20")
    obj.TestAray(a)
    

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2012-09-13
      • 2014-09-29
      • 2014-02-28
      • 1970-01-01
      相关资源
      最近更新 更多