0

VB.Net dll に 1 つの 2 次元バリアントを与える VBA のアプリケーションがあります。これは、すべてのコンポーネントが 2 つの位置を含む別の配列である配列です。

この 2 位置配列を取得したい。VBA を使用している場合、次のようにして各位置からデータに直接アクセスできます。

dataArray(index, 0) or dataArray(index, 1)

そして、私が使用できる2位置配列を取得したいとき:

Dim posArray as variant
posArray = dataArray(index)

posArray(0) には dataArray(index, 0) が含まれ、posArray(1) には dataArray(index, 1) が含まれます。

しかし、VB.Net を使用している場合は、最初の例と同様に、データに直接アクセスできます。ただし、2 番目の例のように、2 次元配列から 1 次元を取得しようとすると、それは不可能です。

Dim posArray as Object
posArray = dataArray(index)

「次元数が正しくない配列を操作しようとしました」と表示されます。

私はそれを機能させるためにすべてを試しましたが、次のように帰属を1つずつ作成したくありません。

posArray(0) = dataArray(index, 0)
posArray(1) = dataArray(index, 1)

お手伝いありがとう。

4

2 に答える 2

2

スピンスルーして 1D 配列を自分で生成する必要があります。.NET には、それを行うためのライブラリ呼び出しはありません。

dim arraySlice as string[yourArrayWidth]
for index = 0 to yourArrayWidth
  arraySlice[index] = yourArray[4, index]
next

上記の例では、yourArray から行 4 を取得し、それを arraySlice に貼り付けます。当然、それをクリーンアップして、rowIndex をパラメーターとして受け入れる関数 (および、columnIndex を受け入れる垂直分割用の別の関数) に入れたいと思うでしょう。

このような小さな関数を何年にもわたって集めて、独自のユーティリティ ライブラリを作成します。5 年後には ArraySlice が必要になり、それを行う関数が既に用意されています。

于 2010-02-26T19:04:34.877 に答える
1
Dim Dim1Len As Integer = 5
Dim Dim2Len As Integer = 2
Dim DimToExtract As Integer = 2
Dim inMultiDArr(5, 2) As Integer
inMultiDArr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}
Dim outSingleDArr(5) As Integer
outSingleDArr = {0, 0, 0, 0, 0}

Buffer.BlockCopy(inMultiDArr, Marshal.SizeOf(GetType(Integer)) * Dim1Len * (DimToExtract - 1),
                 outSingleDArr, 0, Marshal.SizeOf(GetType(Integer)) * Dim1Len)

BlockCopy「outSingleDArr」の後に { 6, 7, 8, 9, 10 } が含まれます。上記はこの投稿から派生したものです。

于 2013-08-29T18:42:24.917 に答える