2009-09-01 3 views
0

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

내가 전화 실행 방법 후 MSG 수정 문자열을 싶어하지만, 당신이 나에게

도와주세요 수 이상 (되지 않은 변경) 작동하지 않는 이유는 무엇입니까? 사전

답변

2

에서

덕분에 당신은 당신이 다시 당신에게 값을 반환 평가 기능 또는 유사한 것을 사용해야합니다.

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.. 

클래스를 만들면 vbscript를 통해 속성에 액세스하고 속성을 변경할 수 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 하지만 하나 이상의 매개 변수를 변경하고 모두 반환해야합니다. 함수를 사용하면 하나만 얻을 수 있습니다. – Hamid

+0

방금 ​​추가 한 다른 버전을 확인하십시오. –

+0

친애하는 Akash Kava, 나는 그렇게하지 만, 응용 프로그램을 실행할 때 "지정된 캐스트가 유효하지 않습니다." 라인에 대한 예외 sc.AddObject ("myObj", obj, false); 참고 : 클래스에 comvisible (true)을 설정하고 프로젝트에도 적용되지만 동일한 오류가 발생합니다. 도와주세요. – Hamid

관련 문제