Question

J'ai une application en VBA qui donne à mon dll VB.Net une variante bi-dimensionnelle. Il est un tableau, dans lequel chaque composant est un autre tableau contenant deux positions.

Je veux obtenir ce tableau à deux positions. Quand je suis en utilisant VBA je peux accéder directement aux données de chaque poste en faisant:

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

Et quand je veux obtenir le tableau à deux positions que je peux utiliser:

Dim posArray as variant
posArray = dataArray(index)

posArray (0) contient tableauDonnees (index, 0) et posArray (1) contient tableauDonnees (index, 1).

Mais quand je me sers VB.Net, je peux accéder directement aux données, tout comme le premier exemple. Cependant, lorsque je tente d'obtenir une dimension du tableau à deux dimensions, comme je l'ai fait dans le second exemple, il est impossible.

Dim posArray as Object
posArray = dataArray(index)

Il dit: « Vous avez tenté d'opérer sur un tableau avec le nombre incorrect de dimensions. »

J'ai tout essayé pour le faire fonctionner, et je ne veux pas faire l'attribution, un par un, comme:

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

Je vous remercie de l'aide.

Était-ce utile?

La solution

Vous aurez besoin de tourner à travers et générer le tableau 1D vous. Il n'y a pas appel de bibliothèque .NET pour le faire pour vous.

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

L'exemple ci-dessus saisir la ligne 4 sur yourArray et le coller dans arraySlice pour vous. Bien sûr, vous aurez envie de nettoyer ça et le mettre dans une fonction qui accepte un rowIndex comme paramètre (et une autre fonction pour diviser verticalement qui accepte un columnIndex).

Il est peu fonctions comme celui-ci que vous collectez au cours des années dans votre propre bibliothèque de services publics. 5 ans à partir de maintenant, vous aurez besoin d'un ArraySlice et vous aurez déjà une fonction de le faire.

Autres conseils

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)

Après la BlockCopy 'outSingleDArr' contiendra {6, 7, 8, 9, 10}. Ce qui précède a été dérivé de ce post.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top