1

Windows 7 の WSH を介して、JScript から COM メソッドによって返される配列のメンバーにアクセスしようとしています。

メソッドのドキュメントは次のとおりです (C# の例として示します)。

public System.Array GetValues();

したがって、これによると、.NET System.Array が返されます。これはすべて問題ありませんが、私のコードは次のとおりです。

// report is Scripting.FileSystemObject file handle
// var is a COM object
arr = var.GetValues();
val = ??
report.WriteLine(val);

これが私が試したことです:

val = arr.Length      // produces empty string
val = arr.GetLength() // "Object doesn't support this property or method"
val = arr.GetValue(0) // "Object doesn't support this property or method"

メソッドが機能しないため、明らかに System.Array オブジェクトではありません。多分それはJScript配列オブジェクトですか?

val = arr[0]          // empty string
val = arr.length      // empty string
val = arr.pop()       // "Object doesn't support this property or method"

では、Array オブジェクトでもありませんか? 組み込み型の配列である可能性があると思います:

val = typeof(arr[0])  // "undefined"
val = typeof(arr)     // "unknown"

最後の手段として、それを Vbsedit にロードしてそこにブレークポイントを設定すると、Vbsedit は 800 個の値を持つ配列を表示します! それらにアクセスする方法がわかりません。

4

2 に答える 2

2

いつものように、質問を投稿した直後に答えを見つけました。以下は、配列「arr」の型を適切な JScript 配列に変換するソリューションです。

arr = var.GetValues().toArray();
val = arr[0];
report.WriteLine(val);
于 2012-10-24T15:29:24.097 に答える
2

配列が JScriptVBArrayオブジェクトとして返されている可能性があります。これは、JScript Array オブジェクトが、COM および VBScript で使用される SAFEARRAY 構造と本質的に大きく異なるためです。メソッドVBArrayを呼び出して、 を JScript 配列に変換できます。toArray

var jsArr = arr.toArray();
于 2012-10-25T05:17:33.673 に答える