VBS处理自定义输入输出参数的几个问题

c# code...

在c#中定义Return、Arithmetic两个类,并在Arithmetic的computing方法中out Return类的实例

using System;
using System.Runtime.InteropServices;

namespace MultiReturn_Class
{
    public class Return
    {
        public double a;
        public double b;
        public string c;
    }
    [ComVisible(true)]    
    public class Arithmetic
    {
        [ComVisible(true)]
        public void computing(double a, double b, out double c, out double d,out  Return back)
        {
            c = a + b;
            d = a - b;
            back = new Return();
            back.a = c;
            back.b = d;
            back.c = "四则运算";
        }
    }
}

VBS code

dim myObj,back
Set myObj = CreateObject("MultiReturn_Class.Arithmetic")
call myObj.computing(3,1,c,d,back)
msgbox(back.a)
msgbox(back.b)
msgbox(back.c)

Error....800A0005

无效的过程调用或参数:'computing'

Most often reason:在过程调用中传递了一个无效参数。这可能是由于参数超出范围,或包含无效数据。另外,有可能在不适当的时间对过程进行了调用。

考虑到VBS的部分变量类型异于C#(参考我的第一篇博文),对out Return back进行修改,改成out Object back 

C#中,Object可以看做是所有类型的基类。。因此在这里需要对Arithmetic.computing代码进行修改,new一个Return的实例,并将其赋给Object back

        public void computing(double a, double b, out double c, out double d,out  Object  back)
        {
            c = a + b;
            d = a - b;
            Return reverse = new Return();
            reverse.a = c;
            reverse.b = d;
            reverse.c = "四则运算";
            back = reverse;
        }

运行VBS...
继续报错

 错误出现在msgbox(back.a)所在的第四行。。证明vbs实现了调用computing方法,但是对Object back的赋失败,考虑在computing中子类对基类赋值过程中new的Return实例,尝试在程序中使class Return对com可见。。

    [ComVisible(true)]
    public class Return
    {
        public double a;
        public double b;
        public string c;
    }

再次运行VBscript得正解

posted on 2012-04-12 11:02  瘦肉微辣  阅读(762)  评论(0编辑  收藏  举报

导航