C# 从MSScript控件获取数据时出现问题

C# 从MSScript控件获取数据时出现问题,c#,vbscript,scriptcontrol,C#,Vbscript,Scriptcontrol,我在C#控制台应用程序中从vbscript获取数据时遇到问题。 我只是写了下面的代码: int[] i = new int[3] { 1, 2, 3 }; string msg = ""; object[] myParam = { msg , i}; MSScriptControl.ScriptControlClass sc = new MSScriptControl.ScriptControlClass();

我在C#控制台应用程序中从vbscript获取数据时遇到问题。 我只是写了下面的代码:

        int[] i = new int[3] { 1, 2, 3 };
        string msg = "";
        object[] myParam = { msg , i};
        MSScriptControl.ScriptControlClass sc = new MSScriptControl.ScriptControlClass();            
        sc.Language = "VBScript";
        sc.AddCode("Sub Test(ByRef msg, ByRef aryI)" + Environment.NewLine + 
                    "  msg = \"234\"" + Environment.NewLine +                        
                    "End Sub");
        sc.Run("Test", ref myParam);
我想在调用Run方法后获得msg modified string,但它不再有效(没有任何更改)

你能帮我一下吗


提前感谢

您必须使用Eval函数或类似的函数将值返回给您

int[] i = new int[3] { 1, 2, 3 };        
string msg = "";        
object[] myParam = { msg , i};        
MSScriptControl.ScriptControlClass sc 
   = new MSScriptControl.ScriptControlClass();
sc.Language = "VBScript";
sc.AddCode("Function Test(ByRef msg, ByRef aryI) as String" + 
Environment.NewLine +  "  msg = \"234\"" + 
Environment.NewLine +  "  Test = msg" + // this Test=msg is a return statement
Environment.NewLine + "End Function");

msg = (string)sc.Run("Test", ref myParam);
or 
msg = (string)sc.Eval("Test",ref myParam);
我不知道上面哪一个会正确工作,但会有类似的东西

您正在将变量传递给脚本,在仅脚本的实例中,该变量用作引用,但当C#在sc.Run方法中传递该变量时,它将仅作为值传递,而不是引用

您无法检索回脚本中的ByRef值

另一种方法是传递整个对象

[ComVisible(true)]
public class VBScriptObjects{
      public string Property1 {get;set;}
      public string Property2 {get;set;}
}


VBScriptObjects obj = new VBScriptObjects();

sc.AddObject( "myObj", obj , false);
sc.Run("myObj.Property1 = 'Testing'");

obj.Property1 <-- this should have a new value now..
[ComVisible(true)]
公共类VBScriptObjects{
公共字符串属性1{get;set;}
公共字符串属性2{get;set;}
}
VBScriptObjects obj=新的VBScriptObjects();
sc.AddObject(“myObj”,obj,false);
sc.Run(“myObj.Property1=‘测试’”);

非常感谢您的快速回复。但我需要更改多个参数并返回所有参数。对于函数,我们只能得到一个。请检查我刚才添加的备用版本。亲爱的Akash Kava,我这样做了,但在运行应用程序时,获取“指定的强制转换无效”。sc.AddObject行上的异常(“myObj”,obj,false);注意:我刚刚为类和项目设置了comvisible(true),但得到了相同的错误。你能帮帮我吗?