2009-03-15 6 views
7

私はActiveXObjectを使ってJavaScriptからC#のメソッドを呼び出すためにしようとしている:JavaScriptの「ネイティブ」配列をC#メソッドから返す方法は?

var myobj = new ActiveXObject('myobject'); 
var arr = myobj.GetArray(); 

結局、arrJScript配列SAFEARRAYオブジェクトが含まれていますが、しません。ネイティブJavaScriptオブジェクトをC#メソッドから返す方法はありますか?

答えて

5

かもしれ私が自分で解決策を見つけましたが、何のドキュメントは、この部分のために存在しません。その後

ArrayObject _lastField; 
byte[] byteArray = new byte[]{2,1,2,3}; 
object[] array = new object[byteArray.Length]; 
byteArray.CopyTo(array, 0); 
_lastField = Microsoft.JScript.GlobalObject.Array.ConstructArray(array); 

あなたはネイティブ配列のようにJavaScriptで_lastField配列を使用することができるようになります:

var myobj = new ActiveXObject('myobject'); 
var arr = myobj.LastField; 
alert(arr[1]); 
+2

私はこれに非常に注意します。 MSは、「JScript」とActiveXを使ってxbrowserの問題をあなたに渡す可能性が高いです。 JSONのアプローチはより柔軟で信頼性の高いimhoになります。 – annakata

8

JSON文字列を返し、JavaScriptオブジェクトに解析することができます。少数を示すためにJSONと副versa-

に.NETオブジェクトをシリアル化するために利用できるの.NETライブラリの数があります。

このquestion and answerがあなたに使用の

+0

に分割することができません、これはそうではありません。同様のことが可能で、実際には私の同僚がC++を使って行っていることは分かっていますが、私はそれに精通していないので、C#を使ってどうすればいいのか知りたいと思います。 –

0

経由VBArrayそれは同じように動作することができます ソリューションは、次のようにJScript.ArrayObjectを使用することですこれは:

  1. 戻りオブジェクト[]はC#から(ディスパッチャで宣言します)。

    var jsArray = new VBArray(myobj.GetArray()).toArray(); 
    for (i = 0; i < jsArray.length; i++) 
    { 
        // use jsArray[i] 
    } 
    

背景情報:JScriptでネイティブJSの配列を取得するには

  • はVBArrayを使用

  • 0

    を入力するには、C#でreturn delimited Joined StringをしてもよいとJavaScript

    //C# 
    public string getArryString() 
    { 
    string[] arrstring = new string[]{"1","2","3"}; 
    return string.Join(",", arrstring); 
    } 
    
    //Javascript 
    var arrstring = objActiveX.getArryString().split(',');