Dll-tableaux-parametres-dimension-safearray

Résolu
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005 - 18 août 2005 à 18:46
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005 - 23 août 2005 à 15:00
Bonjour,

Je passe un projet VB6 en VB.Net et je bloque sur le pb suivant:

dans vb6 je declare mon acces dll comme suivant:
Public Declare Function maFunc Lib "MaDLL.dll" Alias "dllSumMat" (ByRef t1() As Double, ByRef t2() As Double, ByRef Result() As Double) As Integer
et l'appel se fait nickel
la fonction (qui est une somme de matrice t1 et t2) me renvoie un t3 dans les regles.
La dll (c++) recupere les tableaux en type safearray **

Quand je passe en vb.net je passe par une declaration dllimport avec le namespace system.runtime.interopservices et j'arrive a "toucher" la dll.

Si j'appelle une function de ma dll simple (pas de param) je recupere la valeur en return de la dll.... Jusque la tout va bien....

des que j'envoie un tableau en param (ce qui m'interesse pour la somme de matrice) la dll c++ ne reconnait plus rien a rien. Elle trouve une dimension de 0 pour le tableau récupéré et ne fait donc rien...


comment m'en sortir....????

peut etre une piste:
en vb6 je peux passer une matrice (dimension 2) avec t1() en param (comme ci dessus)
mais avec vb.net je suis obligé de definir t1(,) en param pour qu'il compile (dans ma declaration dllimport).

Merci pour toutes vos remarques.

4 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
23 août 2005 à 12:06
salut,



il y a un attribut <MarshalAs(UnmanagedType.SafeArray,
SafeArraySubType:=VarEnum.VT_R8)> à mettre devant les paramètres ()
As Double...

ShareVB
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2005 à 23:20
int dllSumMat(double *pt1, double *pt2, double *pres, DWORD nelems);
n'irait pas aussi bien ?
et plus besoin de safearray, ne fera que gagner en vitesse.
Appelant devra fournir tableau *pres, que ça à changer.

ciao...
BruNews, MVP VC++
0
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005
19 août 2005 à 11:01
ok merci mais ca m'oblige a changer le code dll....
vu que j'ai 34 fonctions du type sumMat j'aurai préféré avoir un code vb.net adapté (en vb6 ca marche tres bien)....
0
Livermore Messages postés 7 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 août 2005
23 août 2005 à 15:00
ShareVB: you the big boss

Many thanks!!
0
Rejoignez-nous