C#メソッドからJavaScriptの「ネイティブ」配列を返す方法は?
-
22-07-2019 - |
質問
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]);
他のヒント
区切られた結合文字列を返すことができます C#でJavaScriptに分割できます
//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}
//Javascript
var arrstring = objActiveX.getArryString().split(',');
VBArrayを使用すると、次のように動作します。
-
C#からobject []を返します(ディスパッチインターフェイスで宣言します)。
-
JScriptでネイティブJS配列を取得するには、VBArrayを使用します。
var jsArray = new VBArray(myobj.GetArray()).toArray(); for (i = 0; i < jsArray.length; i++) { // use jsArray[i] }
背景情報:
-
JScriptは、バリアントのSafeArrayのみをサポートします http:/ /blogs.msdn.com/b/jaiprakash/archive/2007/01/09/jscript-supports-safearrays-of-variants-only.aspx
-
スクリプト可能なオブジェクトモデルの署名を入力するためのエリックの完全ガイド http://blogs.msdn.com/b/ericlippert /archive/2004/07/14/183241.aspx
所属していません StackOverflow