Pergunta

Eu tenho um aplicativo em VBA que fornece à minha dll VB.Net uma variante bidimensional.É um array, em que cada componente é outro array contendo duas posições.

Quero obter esse array de duas posições.Quando estou usando VBA posso acessar diretamente os dados de cada posição fazendo:

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

E quando eu quiser obter o array de duas posições posso usar:

Dim posArray as variant
posArray = dataArray(index)

posArray(0) contém dataArray(index, 0) e posArray(1) contém dataArray(index, 1).

Mas quando estou usando VB.Net, posso acessar diretamente os dados, assim como no primeiro exemplo.Porém, quando tento obter uma dimensão do array bidimensional, como fiz no segundo exemplo, não é possível.

Dim posArray as Object
posArray = dataArray(index)

Diz "Tentativa de operar em uma matriz com o número incorreto de dimensões."

Tentei de tudo para que funcionasse e não quero fazer a atribuição uma por uma, como:

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

Obrigado pela ajuda.

Foi útil?

Solução

Você precisará girar e gerar a matriz 1D. Não há nenhuma chamada de biblioteca .NET para fazer isso por você.

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

O exemplo acima pegou a linha 4 do YourArray e o enfiaria em uma matriz para você. Naturalmente, você deseja limpá -lo e colocá -lo em uma função que aceite um RowIndex como um parâmetro (e outra função para dividir verticalmente que aceita um columnindex).

São pequenas funções como essa que você coletará ao longo dos anos em sua própria biblioteca de serviços públicos. Daqui a 5 anos, você precisará de uma matriz e já terá uma função para fazê -lo.

Outras dicas

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)

Depois BlockCopy o 'outSingleDArr' conterá {6, 7, 8, 9, 10}.O acima foi derivado de esta postagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top