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

C++Builder Discussion :

Utilisation d'une DLL externe pour piloter une carte d'E/S National Instrument


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut Utilisation d'une DLL externe pour piloter une carte d'E/S National Instrument
    Bonjour à tous

    Je vous expose mon problème.
    Je dois piloter une carte d'E/S Nationnal instrument pour envoyer des front montant sur un port de la carte qui est relié à d'autres appareils pour les déclencher.

    Je me suis créé une petite classe perso pour gérer ces envois et tout fonctionne bien sur mon post de travail grâce au fichier d'aide qui est fournit.

    Or à partir du moment ou j'installe l'application sur un autre poste, plus rien ne fonctionne. Je n'ai aucune erreur mais la carte n’envoie pas ce qu'elle doit envoyer.

    Est-ce que cela peut venir de la façon dont j'inclus la dll et la lib dans mon projet ?

    J'ai ajouté au projet donc la dll et la lib que j'ai généré avec implib (car celle qu'il fournisse est pour VC++). et ils fournissent un fichier h pour l'entête des fonctions que j'ai inclus également.

    Savez-vous d'où pourrait venir le problème ?

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    utilise le remote debuger si C++ Builder n'est pas installé sur la machine hôte
    2 Ta DLL est elle chargée statique ou de manière dynamique ?

    dans le premier cas ou se trouve la dll (directory système ou répertoire de projet)

    dans le second cas tu eux allez en mode pas à pas dans ta DLL

    CDLT
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci pour ta réponse DjmSoftware

    Citation Envoyé par DjmSoftware Voir le message
    utilise le remote debuger si C++ Builder n'est pas installé sur la machine hôte
    Je vais essayer.

    Citation Envoyé par DjmSoftware Voir le message
    2 Ta DLL est elle chargée statique ou de manière dynamique ?
    Je t'avoue que je ne sais pas du tout. J'ai suivit l'aide fournis par le constructeur.

    Citation Envoyé par DjmSoftware Voir le message
    dans le premier cas ou se trouve la dll (directory système ou répertoire de projet)
    La DLL est positionné dans le répertoire système lorsqu'on installe le package fournit avec la carte et qui fournit toutes les fonctionnalités.

    J'ai également essayé en la positionnant dans le répertoire de l'application mais cela ne change rien.

    Citation Envoyé par DjmSoftware Voir le message
    dans le second cas tu eux allez en mode pas à pas dans ta DLL
    Je vais regarder de ce côté là également

  4. #4
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    concernant l'utilisation statique ou dynamique
    c?est relativement simple

    Mode Statique : ton projet fait référence à une librairie , cette dernière est chargée automatiquement par ton programme
    Avantage: Simple d'emploi
    désinconvenient: débugage plus diffiile

    mode dynamique: c'est à toi de charger,respectivement décharger ta DLL via LoadLibrary,et Frelibrary
    ainsi que de GetProcAddress pour charger toutes les fonctions exportée de la DLL et que tu désire utilisé

    ca a l'air un peu plus complexe mais c'est plus simple que tu pourrais le penser

    voir le tuto icihttps://lfe.developpez.com/DLL/

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Pour être + précis

    statique : tu n'as aucune dépendance, tout est dans l'exécutable.
    L'inconvénient : l'exécutable est + lourd ... ce qui affecte au moins le temps de compilation et de chargement lors de l'exécution.

    dynamique : du code peut se trouver dans 1 bibliothèque ("library" en anglais)
    L'inconvénient : la distribution (quoique avec les packagers) et l'installation (quoique avec les packagers)
    Sans parler du DLL Hell, + ou - résolu.
    Et même les appels peuvent être optimisés (1 seul code en mémoire)

    Toi tu sembles utiliser 1 bibliothèque partagée (il me semble que c'est "shared library")
    C'est 1 truc spécifique à Windows : c'est 1 bibliothèque dynamique mais tout le processus d'ouverture/ appel/ fermeture est transparent (il est généré à la compilation via 1 stub il me semble)

    Pour ton problème, c'est assez difficile : il faut coder 1 version en mode "statique". Et 1 fois que cela fonctionne tu exportes le code dans 1 bibliothèque.
    Parce que, de mémoire, la gestion mémoire n'est pas la même dans l'exécutable et dans la bibliothèque. Surtout si tu as des données créées à l'exécution qui passe de l'exécutable à ta bibliothèque, ou vice-versa.

  6. #6
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Bonsoir
    je te livre une piste de solution

    ta carte HW communique avec ton PC par l'intermédiaire d'un driver, et la dll que tu désire interfacer et le lien entre ta carte et ton application
    les sources de dérangement sont par conséquent multiples.

    il te faudra par conséquence aller à la cave.
    1.identifier le driver dans windows (en principe un fichier avec une extension .sys)
    2. sur ton autre pc vérifier si ce driver est correctement installé
    3 vérifier si les versions de windows sont identiques sur les 2 machines (w32/x64)
    4. installer le remote debuger sur la machine cible
    5.vérifier que la DLL est correctement chargée sur la machine cible


    courage

    Nom : Capture d’écran 2022-02-07 à 20.13.38.png
Affichages : 230
Taille : 80,6 Ko
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci pour toutes tes explications.
    Je t'avoue que je suis un peu perdu là, je nage même. J'utilise cette carte depuis longtemps et avant je n'avais pas de problème (jusqu'à RAD Berlin). C'est depuis que je suis passé à Sydney et maintenant Alexandria que cela ne fonctionne plus. Pourtant je n'ai rien changé dans ma classe maison qui s'occupe des communications avec la Carte NI

    Je vais essayé ce que tu m'as indiqué

  8. #8
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    Pour revenir sur mon précèdent post
    Ta carte est est connectée sur un slot interne de ton pc ou connectée par usb de manière externe
    Peux m’informer sir ta carte type?? éco

    Merci
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  9. #9
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Désolé, je n'ai pas lu tout l'historique de message...

    Ma question, est-ce que tu utilises bcc32 (legacy compiler) avec ta lib ou tu utilises bcc32c (CLANG) avec ta vielle lib. Si c'est le cas, c'est normal que cela ne fonctionne pas, car tu dois générer un fichier .a avec mkexp.exe. Non avec implib.exe, comme c'était le cas avec bcc32.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  10. #10
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut Crayon,
    Remarque parfaitement pertinente,toutefois uniquement en compilation 64 bits.
    Autrement impliqué fait parfaitement le job quelque soit le type de compilateur

    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  11. #11
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Tu as raison DjmSoftware. J'ai écrit trop vite 😖

    Source: https://docwiki.embarcadero.com/RADS...dney/fr/BCC32C

    Je viens juste de me mettre à bcc32c la fin de semaine dernière. C'est encore tout nouveau pour moi.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

Discussions similaires

  1. [MVVM] Plantage WPF après utilisation d'une dll externe
    Par HelMar dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 04/12/2015, 10h32
  2. [Lazarus] Utilisation d'une DLL externe = crash !
    Par [ZiP] dans le forum Lazarus
    Réponses: 17
    Dernier message: 24/02/2013, 12h31
  3. [WD12] Utilisation d'une dll externe
    Par rems033 dans le forum WinDev
    Réponses: 4
    Dernier message: 10/12/2009, 14h07
  4. Probleme d'utilisation d'une DLL externe
    Par Pasiphae dans le forum C++/CLI
    Réponses: 2
    Dernier message: 19/02/2007, 15h17
  5. dll ActiveX utilisant une DLL externe
    Par Metal3d dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/11/2005, 18h02

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