IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6]Passage d'un tableau dans une DLL écrite en delphi


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 585
    Points
    585
    Par défaut [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Bonjour,

    J'essaie de transmettre un tableau à un procedure faisant partie d'une dll écrite en delphi.

    La procedure en delphi est :
    procedure transTableau (var pMat : PTabMat);stdcall;export;
    où PTabMat est un pointeur sur TTabMat qui est un tableau de double.
    et var pour passer le tableau par reference.

    en vb je déclare :
    Private Declare Sub TransMat Lib "PMadll.dll" Alias "transTableau" (addrT As Long)

    ensuite je déclare un tableau et transmet le premier element pour donner l'adresse du tableau
    Dim Mat(5) as double
    TransMat (Mat(0))

    Et VB plante erreur fatal.

    J'ai aussi essayé de passer le tableau (en changeant le code de la dll pour qu'elle attend un tableau array of double à la place de PTabMat) mais là j'ai une erreur de compilation : tableau ou type définit par l'utilisateur attendu (la déclaration de la DLL devient alors alias "transTableau(T() as double)" et l'appel TransMat(Mat()) ou TransMat(Mat)).

    Help

  2. #2
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    et si tu passes juste
    TransMat (Mat)

    ça fais quoi ??
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
    (Albert Einstein)

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 585
    Points
    585
    Par défaut
    vb retourne erreur tableau ou type définit par l'utilisateur.

    Par contre, je pense avoir trouver la solution.
    plutôt que de passer le tableau, j'ai cherché à passer un pointeur sur le tableau. Mais bon je pouvais toujours chercher, il n'y a pas de pointeur en vb.
    Alors je passe le premier élément comme il passe par référence je transmet en fait son adresse. En delphi j'en fait un pointeur et j'ai alors un pointeur qui pointe sur le premier éléement du tableau. Mon pointeur est en plus un pointeur sur tableau, il me suffit de transmettre également la taille du tableau et le tour est joué.

    Enfin, j'espère.

    PS : c'est le même principe que lorsque l'on veut transmettre des chaines.

  4. #4
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Points : 1 515
    Points
    1 515
    Par défaut
    Il existe un moyen mais je ne garantis rien : essaie de passer en paramètre AdressOf(tonTab)
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  5. #5
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    il me semblait aussi qu'il fallait passé le premier élément du tableau, de même, dans ton code, tu passes
    Private Declare Sub TransMat Lib "PMadll.dll" Alias "transTableau" (addrT As Long)
    ce qui est par défaut par référence (Byref), ce qui devrai etre bon ...
    es-tu sur de ta déclaration dans ta dll, je pense que tu ne récupère pas l'adresse du tableau correctement ...

    bhaal76
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
    (Albert Einstein)

  6. #6
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Points : 1 515
    Points
    1 515
    Par défaut
    Exact ! Il est vrai que par défaut les passages en paramètres en VB sont par référence.
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 15
    Points : 585
    Points
    585
    Par défaut
    pour la déclaration :
    Private Declare Sub TransMat Lib "PMadll.dll" Alias "transTableau" (ByRef T As Double, ByVal taille As Long)

    et pour l'utilisation
    Call TransMat(Mat(0), 5)
    ou
    TransMat(Mat(0), taille=5) Rmq je ne suis pas sur de celle là mais peut m'importe

    Par contre transmettre l'addresse ne marche pas bien, d'abord parce que je ne connaissais pas AddressOf(T), dans l'aide de vb une recherche sur adresse ne m'a rien donné sic. et ensuite parce qu'en suite il faut se battre pour la transformer en pointeur.

    Enfin, voilà le code marche impec.

    Eh! Zorro, sache qu'avant de poser ma question, j'ai recherché dans l'aide de vb, dans un bouquin sur internet et lancer une recherche sur les dll, passage de parametre, d'ailleurs dans les resultats j'ai trouvé une question où je pouvais répondre (passer des string en paramètre dns une dll en c, c'est le même principe que j'ai utiliser pour un tableau sauf qu'il ne fallait pas chercher à transmettre un pointeur).

    Sinon comme VB passe par défaut les paramètre par référence, en transmettant le premier élément, on transmet en fait son adresse, que l'on n'a plsu qu'a transformer en pointeur.
    si P est notre pointeur, PTabMat le type
    -> P := @ValeurTransmise_soit_l'adresse; // dans delphi
    @ : donne l'adresse de la variable que l'on affecte à P.

    Merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Vb6] Appel d'un Tableau dans une requete SQL
    Par Netzo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/07/2010, 09h57
  2. Passage d'un tableau dans une procédure
    Par Matmal11 dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 12/10/2009, 17h04
  3. Passage d'un tableau d'une DLL standard à VB6
    Par andrebernard dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/05/2009, 14h53
  4. [Debutant] Remplissage d'un tableau dans une dll
    Par vbbarent dans le forum Débuter
    Réponses: 3
    Dernier message: 28/05/2008, 14h23
  5. Réponses: 3
    Dernier message: 14/04/2007, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo