Dll-tableaux-parametres-dimension-safearray [Résolu]

Livermore 7 Messages postés jeudi 28 juillet 2005Date d'inscription 23 août 2005 Dernière intervention - 18 août 2005 à 18:46 - Dernière réponse : Livermore 7 Messages postés jeudi 28 juillet 2005Date d'inscription 23 août 2005 Dernière intervention
- 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.
Afficher la suite 

4 réponses

Meilleure réponse
ShareVB 2717 Messages postés vendredi 28 juin 2002Date d'inscription 13 janvier 2016 Dernière intervention - 23 août 2005 à 12:06
3
Merci
salut,



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

ShareVB

Merci ShareVB 3

codes-sources a aidé 87155 internautes ce mois-ci

BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 18 août 2005 à 23:20
0
Merci
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++
Livermore 7 Messages postés jeudi 28 juillet 2005Date d'inscription 23 août 2005 Dernière intervention - 19 août 2005 à 11:01
0
Merci
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)....
Livermore 7 Messages postés jeudi 28 juillet 2005Date d'inscription 23 août 2005 Dernière intervention - 23 août 2005 à 15:00
0
Merci
ShareVB: you the big boss

Many thanks!!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.