質問

ActiveXObject を使用してJavaScriptからC#メソッドを呼び出そうとしています:

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

最終的に、 arr には SAFEARRAY オブジェクトが含まれますが、 JScript 配列は含まれません。 C#メソッドからネイティブJavaScriptオブジェクトを返す方法はありますか?

役に立ちましたか?

解決 2

自分で解決策を見つけましたが、この部分のドキュメントはありません。 解決策は、 JScript.ArrayObject を次の方法で使用することです。

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

他のヒント

JSON 文字列を返してから、JavaScriptオブジェクトに解析できます。 .NETオブジェクトをJSONにシリアル化したり、その逆を行ったりするために利用できる多くの.NETライブラリがあります

いくつか例を挙げます。

この質問と回答はあなたに使用

区切られた結合文字列を返すことができます C#でJavaScriptに分割できます

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

//Javascript
var arrstring = objActiveX.getArryString().split(',');

VBArrayを使用すると、次のように動作します。

  1. C#からobject []を返します(ディスパッチインターフェイスで宣言します)。

  2. JScriptでネイティブJS配列を取得するには、VBArrayを使用します。

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

背景情報:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top