从MSScriptControl获取数据的问题

问题描述:

我有问题从C#控制台应用程序中从VBScript获取数据。 我只写下面的代码:从MSScriptControl获取数据的问题

 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); 

我想以后调用运行方法味精修改后的字符串,但它并没有了(没有任何变化)工作

能否请你给我帮忙吗?

在此先感谢

你将不得不使用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方法可变它并将其作为唯一的值,不能引用。

没有办法,你可以retrive值回它的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,可以让你通过VBScript访问和更改属性。

+0

非常感谢您的快速回复。 但我需要更改多个参数并全部返回。用函数我们只能得到一个。 – Hamid

+0

请检查我刚刚添加的备用版本。 –

+0

亲爱的阿卡什卡瓦,我这样做,但是当运行应用程序时,得到“指定的转换无效”。线上的异常sc.AddObject(“myObj”,obj,false); 注意:我只为类和项目设置了comvisible(true),但得到相同的错误。 你能帮我吗? – Hamid