I'm using VC6. i have a DLL written in VC6 and used by VB6( and VBA Excel), i use SafeArray as parameter, the array is created(declared), in VB and C++ fill it. now i need VC++ to get an array of array of different sizes, and VB can't know the size of these arrays, so the arrays will be 'created' in VC. here the code that i use(and it crashes): void __declspec(dllexport) CALLBACK Remplir_table(LPSAFEARRAY FAR *tab1) { VARIANT HUGEP * CONTENU; SAFEARRAYBOUND sabound[1]; // 1-D array SAFEARRAY FAR* psa = NULL; // SAFEARRAY structure pointer VARIANT TEMPORARY; VariantInit(&TEMPORARY); SafeArrayAccessData(*tab1, (void HUGEP**)&CONTENU); sabound[0].lLbound = 0; sabound[0].cElements = 2; for (int i = 0; i<2; i++) { psa = SafeArrayCreate( VT_R4, 1, sabound ); float HUGEP* ResData; SafeArrayAccessData(psa, (void HUGEP**)&ResData); ResData[0] = 1.5; //just for test ResData[1] = 0.75;//just for test V_VT(&TEMPORARY ) = VT_ARRAY | VT_R4; V_ARRAY(&TEMPORARY) = psa; SafeArrayUnaccessData(psa); VariantCopy(&CONTENU,&TEMPORARY); } SafeArrayUnaccessData(*tab1); } the vb side: Dim tab1(1) As Variant Call Remplir_table(tab1)