首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MSScriptControl获取数据时出现问题

从MSScriptControl获取数据时出现问题
EN

Stack Overflow用户
提问于 2009-09-01 10:37:21
回答 1查看 4.3K关注 0票数 0

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

代码语言:javascript
复制
        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修改后的字符串,但它不再起作用(不是任何更改)

你能帮帮我吗?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2009-09-01 10:56:56

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

代码语言:javascript
复制
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值。

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

代码语言:javascript
复制
[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访问和修改属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1361731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档