2009-09-01 22 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); 

私はコールRunメソッドの後にMSG変更された文字列を取得したいが、それはあなたが私に

を助けてもらえもう(ない変更)は動作しませんか?事前

答えて

2

ありがとうございますあなたに戻ってあなたの値を返します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); 

上記のどちらが正しいかわかりませんが、類似したものがあります。

スクリプトに変数を渡していますが、スクリプトのみのインスタンスでは変数は参照として使用されていますが、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

すばやく返信いただきありがとうございます。 しかし、私は複数のパラメータを変更してすべてを返す必要があります。 機能では1つしか取得できません。 – Hamid

+0

追加したばかりのバージョンを確認してください。 –

+0

親愛なるAkash Kavaさん、私はそれをしますが、アプリケーションを実行すると、「指定されたキャストは無効です」と表示されます。行の例外sc.AddObject( "myObj"、obj、false); 注:クラスとプロジェクトにcomvisible(true)を設定していますが、同じエラーが表示されます。 私を助けてもらえますか? – Hamid

関連する問題