vba_blitz
Messages postés32Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention26 juin 2007
-
26 mars 2007 à 09:27
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
27 mars 2007 à 23:23
Bonjour,
je souhaite faire passer un tableau 2D de double à partir de Vb pour appeler une dll c++. Je sais que pour les tableaux à une dimension il suffit de passer le premier element du tableau mais comment faire pour les tableaux 2D ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 mars 2007 à 10:26
Erreur grave, dans ton code....
ReDim S(3, 3)
fais un tableau de 4x4 cases (sauf si tu as un Option Base 1)
quoi qu'il en soit....
tiens, c'est plus simple ainsi :
void BH ( LPSAFEARRAY* signaux )
{
// Si on a bien un tableau de longs à deux dimensions...
if ((*signaux)->cDims==2 && (*signaux)->cbElements==4)
{
long nCountX = (*signaux)->rgsabound[1].cElements;
long nCountY = (*signaux)->rgsabound[0].cElements;
SafeArrayLock(*signaux);
long *pElements = (long*)(*signaux)->pvData;
for( long y=0;y<nCountY;y++ )
for( long x=0;x<nCountX;x++ )
pElements[(y*nCountX)+x] = x*y;
SafeArrayUnlock(*signaux);
}
}
en VB:
Private Declare Sub
BH Lib "G:\Signaux_dll\debug\Signaux_dll.dll" (ByRef Signaux() As Long)
Private Sub Form_Load()
Dim xnSignaux(2, 5) As Long
BH xnSignaux
End Sub<hr />,
----
By Renfield
plus besoin de passer le premier element, tu passe ton tableau, quelle que soit sa taille ^^
pense bien a utilise __stdcall comme convention d'appel dans ta dll
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 26 mars 2007 à 12:05
pareil.... les données sont contigues en mémoire, quoi qu'il en soit.
passes egalement les dimensions de ta matrice.
gaffe, cependant, je crois que VB et C gèrent pas les tableaux dans le meme sens...
en gros, ce que tu aura en
array(x,y) en VB sera en array(y,x) en C