3

COMコンポーネントは、オブジェクトタイプのrefパラメーターを期待するAPIを公開します。このAPIのドキュメントに従って、refオブジェクトに値の配列を入力します。今、私の問題はprod envにあり、返される要素の数を予測できません。

次のコードが機能します。

     COMClass objCOM = new COMClass ();
     object colOfInts= new int[10]; // What if I don't know the following will return array of size 10?
     int errorcode = objCOM.FillThisIn(ref colOfInts);

しかし、APIがrefで返す配列のサイズがわからない場合はどうなりますか。

ここで更新

        object colOfInts = null;
        int errorcode = objCOM .FillThisIn(ref colOfInts);

タイプを確認すると、System.Int32[*]が表示されます。

基本的に、この配列を反復処理して、要素の存在を確認する必要があります

4

3 に答える 3

3

下限が0ではない配列を取得しています。これはCOM相互運用機能では珍しいことではなく、次に考えられる選択肢は1です。これをコピーする必要はありません。Array.GetValue()を使用して要素にアクセスできます。Array.GetLowerBound()はどこから開始するかを示し、Array.GetLength()またはArray.GetUpperBound()はどこまで進むかを示します。

于 2012-06-27T16:59:55.000 に答える
0

最後に、私はこれに関するいくつかの解決策を得ました。erroCodeは配列のサイズになることを忘れました。

        int[] test = new int[errorCode];            
        Buffer.BlockCopy((System.Array)colOfInts, 0, test, 0, errorCode * sizeof(int));
于 2012-06-27T14:17:15.337 に答える
0

の配列を取得する場合はSystem.Int32、おそらくキャストする必要があります。

    object colOfInts = null; 
    int errorcode = objCOM .FillThisIn(ref colOfInts); 

    int[] arrayOfInts = (int[]) colOfInts;

次にarrayOfInts.Length、配列内の要素の数が表示されます。

于 2012-06-27T16:58:17.923 に答える