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

WinDev Discussion :

Problème avec DLL ecrite en Visual Basic [WD14]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut Problème avec DLL ecrite en Visual Basic
    Bonjour à tous


    Je suis débutant en programmation Windev. Je suis actuellement entrain de dévelpper un programme sous Windev permettant la communication entre un automate Unitronics V350 et un PC. Pour ce faire le fabricant d’automate met à disposition sur son site www.unitronics.com un fichier dll (UnCmDrv1.dll) ainsi qu’un exemple écrit sous VBA Excel.

    Voici un bout du programme écrit sous Excel (ce programme permet l’ouverture du port série COM1):


    Private Function prvOpenPort() As Boolean

    Dim eComParam As tPC_CommSettings



    'Create new instance of the Comm Driver Dll.

    Set mComDriver = New UnCmDrv1.clsCommDriver

    'Configure the connection parameters.

    With eComParam

    .Baudrate = eBR_38400

    .DataBits = eDB_8

    .Parity = eP_None

    .StopBits = eSB_1

    .TimeOut = 500

    .Retries = 3

    End With

    mComDriver.Comm_Autodetect = True

    mComDriver.ShowCommMessages = True

    'Opens the com.

    prvOpenPort = mComDriver.Comm_Open(Cells(5, 4), eComParam) ‘******Cells(5,4) = 1 numéro du port******

    End Function



    Voici le programme sous Windev que j’ai écrit ( ou devrais je dire un exemple de la multitude de programme que j’ai déjà essayé sans succés)
    (copier/coller d'un fichier texte)


    AutomationParamètre(apIndiceBaseTableau = 1)


    enBaudRate est une structure

    eBR_4800 est un Variant

    eBR_9600 est un Variant

    FIN


    enDataBits est une structure

    eDB_7 est un Variant

    eDB_8 est un Variant

    FIN



    enParity est une structure

    eP_None est un Variant

    eP_Odd est un Variant

    FIN



    enStopBits est une structure

    eSB_1 est un Variant

    eSB_2 est un Variant

    FIN


    tPC_CommSettings est composée de


    Baurate est enBaudRate

    DataBits est un enDataBits

    Parity est un enParity

    Retries est un Variant = 3

    StopBits est un enStopBits

    TimeOut est un Variant = 500

    FIN

    eComparam est un tableau de 0 Variants

    eComparam = [tPC_CommSettings.Baurate.eBR_9600,tPC_CommSettings.DataBits.eDB_8,tPC_CommSettings.Parity.eP_None,tPC_CommSettings.Retries,tPC_CommSettings.StopBits.eSB_1,tPC_CommSettings.TimeOut]


    OuvertCom est un booléen

    mComDriver est un objet Automation "UnCmDrv1.clsCommDriver"

    mComDriver>>Comm_Autodetect = Vrai

    mComDriver>>ShowCommMessages = Vrai

    OuvertCom = mComDriver>>Comm_Open(1,eComparam)

    SI OuvertCom = Vrai ALORS Info("Port Com Ouvert") SINON Info("Ouverture Port COM échouée")


    Avec ce programme l’activeX renvoi une erreur : 80020005 type incorrect pour le paramètre 2 ( a savoir eComparam)

    Si je déclare le type tPC_CommSetting comme structure c’ est Windev qui me renvoi une erreur du genre : Variable incompatible avec l’objet automation



    J’ai essayé différentes combinaisons avec des tableaux, des structures, des variables composées mais sans succés.

    Je joins à ce message l’exemple sous VBA, pour le fichier dll (UnCmDrv1.dll) vous pouver le télécharger sur http://www.unitronics.com/Content.aspx?page=Downloads. Voir COM Object ActiveX .dll



    Si vous avez une idée pour résoudre mon problème ?



    Merci de votre considération et de votre temps



    A bientôt



    Sonny BORSOI

  2. #2
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Par défaut
    Lors d'une formation windev je crois me souvenir que le formateur nous a dit que seul les dll écrites en C passaient bien.

  3. #3
    Membre Expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Par défaut
    Pour avoir instancier une dll VB (écrite par mes soins) dans WinDev je peux te confirmer que cela fonctionne.

    Attention au format de chaine de caractères dans VB qu'il faut forcer en null char terminated.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut
    Bonjour à tous,

    Merci d'avoir répondu à mon message. Malheureusement je ne comprend pas ce que veut dire "forcer en null char terminated". Merci de m'éclairer.

    A bientôt

  5. #5
    Membre Expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Par défaut
    les chaines de caractères doivent se terminer par le caractère '\0' ce qui n'est pas le cas par défaut en VB au contraire du C.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour,

    SonnyB, j'ai regardé de près le fichier DLL ActiveX ainsi que l'exemple.

    Il faut bien utiliser une structure, mais en faisant attention:
    • à respecter les types des membres de la structure,
    • de passer à la méthode l'adresse de la structure.


    Donc il faut définir la structure dans un bloc de déclaration du projet ou d'une collection de procédures:
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    tPC_CommSettings est une structure
     
    	Baudrate est un entier sur 4 octets
    	DataBits est un entier sur 4 octets
    	Parity est un entier sur 4 octets
    	Retries est un entier sur 2 octets
    	StopBits est un entier sur 4 octets
    	TimeOut est un entier sur 4 octets
    FIN

    Ensuite, voici une adaptation des procédures VB et WD:

    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PROCEDURE prvOpenPort()
     
    OuvertCom est un entier
    eComParam est un tPC_CommSettings = [38400, 8, 0, 3, 1, 500]
    mComDriver est un objet Automation "UnCmDrv1.clsCommDriver"
     
    mComDriver>>Comm_Autodetect(-1)
    mComDriver>>ShowCommMessages(-1)
     
    OuvertCom = mComDriver>>Comm_Open(1, &eComParam)
     
    SI OuvertCom = 0 ALORS Info("Ouverture Port COM échouée") SINON Info("Port Com Ouvert")

    J'espère que ça t'aidera un peu.

    Je n'ai pas pris le temps de recréer toutes les constantes.
    A toi de voir...
    _

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

Discussions similaires

  1. problèmes avec un dialogue sous visual 2002
    Par twinseb dans le forum MFC
    Réponses: 3
    Dernier message: 29/11/2006, 15h59
  2. Problème avec dll win32com
    Par jbidou88 dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2006, 14h06
  3. Réponses: 4
    Dernier message: 31/01/2006, 17h59
  4. problème avec directx 9 et visual C++ 6
    Par 180degrés dans le forum MFC
    Réponses: 2
    Dernier message: 28/09/2005, 09h43
  5. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43

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