从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访问和更改属性。
非常感谢您的快速回复。 但我需要更改多个参数并全部返回。用函数我们只能得到一个。 – Hamid
请检查我刚刚添加的备用版本。 –
亲爱的阿卡什卡瓦,我这样做,但是当运行应用程序时,得到“指定的转换无效”。线上的异常sc.AddObject(“myObj”,obj,false); 注意:我只为类和项目设置了comvisible(true),但得到相同的错误。 你能帮我吗? – Hamid