Pregunta

Tengo una aplicación en VBA que da a mi VB.Net DLL una variante bidimensional. Es un una matriz, en la que cada componente es una otra matriz que contiene dos posiciones.

Quiero obtener esta matriz de dos posiciones. Cuando estoy usando VBA que pueden acceder directamente a los datos de cada posición haciendo:

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

Y cuando quiero obtener la matriz de dos posiciones que puede utilizar:

Dim posArray as variant
posArray = dataArray(index)

posArray (0) contiene dataArray (índice, 0) y posArray (1) contiene dataArray (índice, 1).

Pero cuando estoy usando VB.Net, puedo acceder directamente a los datos, al igual que el primer ejemplo. Sin embargo, cuando intento para obtener una dimensión de la matriz de dos dimensiones, como lo hice en el segundo ejemplo, no es posible.

Dim posArray as Object
posArray = dataArray(index)

Se dice "intento para operar en una matriz con el número incorrecto de dimensiones."

He intentado todo para hacer que funcione, y no querer hacer la atribución a una, como:

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

Gracias por la ayuda.

¿Fue útil?

Solución

Tendrá que giro a través de la matriz y generar 1D mismo. No hay ninguna llamada a la librería de .NET que lo haga por usted.

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

El ejemplo anterior sería agarrar la fila 4 de yourArray y pegarlo en arraySlice para usted. Naturalmente, tendrá que limpiar eso y ponerlo en una función que acepta un rowIndex como parámetro (y otra función para dividir verticalmente que acepta un columnIndex).

Es pequeñas funciones como este que usted recoger lo largo de los años en su propia biblioteca de utilidades. 5 años a partir de ahora, se necesita de una ArraySlice y ya tendrá una función para hacerlo.

Otros consejos

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)

Después de BlockCopy la 'outSingleDArr' contendrá {6, 7, 8, 9, 10}. Lo anterior se derivó de este post .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top