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 :

Problème de chargement de DLL


Sujet :

C++Builder

  1. #1
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 132
    Billets dans le blog
    5
    Par défaut Problème de chargement de DLL
    Bonjour à tous

    J'ai développé une DLL avec visual studio 2017 en C/C++ que j'utilise avec une autre application FMX développé avec CBuilder. Pour charger ma DLL j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    _dllCam = LoadLibrary(L"LibCamVimba.dll");
    	if (_dllCam != NULL) {
    		libvim_Test = (IFUNC)GetProcAddress(_dllCam, "ncl_Test");
    		libvim_InitCamera = (IFUNCPI)GetProcAddress(_dllCam, "ncl_InitCamera");
    		libvim_StopCamera = (VFUNC)GetProcAddress(_dllCam, "ncl_StopCamera");
    		libvim_PrepEnr = (IFUNCSSSS)GetProcAddress(_dllCam, "ncl_PrepEnr");
    		libvim_StartEnr = (IFUNCI)GetProcAddress(_dllCam, "ncl_StartEnr");
    		libvim_GetIndex = (IFUNCI)GetProcAddress(_dllCam, "ncl_GetIndex");
    		libvim_GetImage = (IFUNCPI)GetProcAddress(_dllCam, "ncl_GetImage");
    		libvim_GetFreq = (DFUNC)GetProcAddress(_dllCam, "ncl_GetFreq");
    		if (libvim_Test != NULL && libvim_InitCamera != NULL && libvim_StartEnr != NULL) {
    			lblAlerte->Text = "DLL OK ";
    		}
    		else
    			lblAlerte->Text = "PROBLEME func TEST";
    	}
    	else {
    		int err = GetLastError();
    		lblAlerte->Text = "PROBLEME DLL " + IntToStr(err);
    	}
    Ce code fonctionne bien sous windows7 dans mon environnement de développement. Mais lorsque je mets les exécutables sur le PC qui va exploiter j'ai l'erreur 126 = ERROR_MOD_NOT_FOUND
    Le PC d'exploitation es sous windows10.
    J'ai vérifié que ma dll est bien dans le même répertoire que l’exécutable.
    J'ai même essayé en indiquant le chemin absolu de ma dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _dllCam = LoadLibrary(L"C:\\MONCHEMIN\\LibCamVimba.dll");
    Par acquis de conscience j'ai récupéré l'erreur juste après LoadLibrary(L"LibCamVimba.dll"); dans mon environement de développement et j'ai l'erreur 126 mais il semble que le module est bien chargé car la variable _dllCam n'est pas nulle et quand j’appelle les fonctions de la DLL par la suite dans le programme ça fonctionne.

    Il semblerait que le problème soit au niveau du système d'exploitation

    Une idée

  2. #2
    Membre Expert
    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
    Billets dans le blog
    1
    Par défaut
    Hello
    problème étrange
    une petite chose il faut utiliser LoadLibraryW si tu utilise unicode
    quelques pistes de résolution

    a tu essayé le débogage distant ?
    essaye d'installer une machine virtuelle (VirtualBox) et refais un test dans une installation propre.
    tu pourrais poster ta DLL pour me permettre de tester ton code
    tu peux également essayer de charger ta DLL comme un fichier normal et voir si c’est possible que donne le chargement statique de ta dll?
    Ta Dll crée avec VS a elle des dépendances avec d’autres Dll de VS non presente sur le système hôte ?
    a tu la même erreur en exécutant en tant qu'administrateur?

    bien 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

  3. #3
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 132
    Billets dans le blog
    5
    Par défaut
    Il y avait un problème de dépendance. Autant le système l'indique pour les executables autant il ne le fait pas pour les dll. Pour connaitre les dépendances j'ai utilisé le logiciel depends
    Merci pour toutes les pistes.

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

Discussions similaires

  1. [XL-2010] Version 64 bit - Problème de chargement de DLL
    Par ArnaudEIC dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/09/2010, 14h26
  2. Problème de chargement de dll
    Par nasbe dans le forum WinDev
    Réponses: 2
    Dernier message: 09/01/2009, 17h32
  3. Problème de Chargement de DLL
    Par coax81 dans le forum Langage
    Réponses: 7
    Dernier message: 14/10/2008, 18h13
  4. JNI - Problème de chargement de DLL
    Par indepthsight dans le forum C++
    Réponses: 1
    Dernier message: 30/11/2007, 10h19
  5. [JNI] Encore un problème de chargement de dll
    Par seiryujay dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 10/08/2006, 13h23

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