Debugging Calls to Shared Libraries
- Mise à jour2026-06-12
- Temps de lecture : 7 minute(s)
Debug LabVIEW shared library calls by troubleshooting the functionality of your library and your Call Library Function Node configuration.
Dépannage des nœuds Appeler une fonction d'une DLL
Si vous voyez des erreurs lors de l'appel de bibliothèques partagées dans LabVIEW, recherchez les problèmes suivants pour vous assurer que vous avez configuré correctement votre nœud Appeler une fonction d'une DLL
- Vérifiez que le nœud Appeler une fonction d'une DLL a le nom ou le chemin correct pour la bibliothèque partagée. Assurez-vous également de spécifier l'emplacement sur disque approprié pour votre cas d'utilisation. Pour certains cas d'utilisation, vous devez spécifier la bibliothèque partagée par chemin, alors que pour d'autres, vous devez spécifier la bibliothèque partagée par nom.
- Pour les bibliothèques partagées construites avec LabVIEW, assurez-vous que l'ordinateur a une version du moteur d'exécution LabVIEW compatible avec chaque version de LabVIEW utilisée pour créer les bibliothèques partagées.
- Si vous recevez le message d'erreur Fonction introuvable dans bibliothèque, vérifiez que le nœud Appeler une fonction d'une DLL a l'orthographe, la syntaxe et la sensibilité à la casse correctes pour le nom de la fonction que vous appelez.
- Vérifiez que le compilateur n'a pas décoré la fonction.
- Si vous recevez un message d'erreur indiquant qu'une bibliothèque partagée secondaire est introuvable alors que vous avez spécifié correctement le chemin de la bibliothèque partagée principale dans le nœud Appeler une fonction d'une DLL, la bibliothèque partagée principale a besoin de fonctions supplémentaires d'une ou plusieurs autres bibliothèques partagées. Recherchez les autres bibliothèques partagées et placez-les dans le même répertoire que la bibliothèque partagée qui en a besoin ou dans un répertoire situé dans le chemin de recherche. Reportez-vous à la Base de connaissances sur ni.com pour obtenir plus d'informations.
- Si votre VI plante, vérifiez que les types de retour et les types de données des arguments des fonctions du nœud Appeler une fonction d'une DLL correspondent exactement aux types de données utilisés par votre fonction. Vérifiez aussi que le nœud Appeler une fonction d'une DLL utilise la convention d'appel appropriée (C ou __stdcall en utilisant l'onglet Niveau de détection d'erreur de la boîte de dialogue Appeler une fonction d'une DLL.
- Vérifiez que tous les paramètres sont définis pour être passés par la méthode appropriée, telle que valeur ou pointeur. Vérifiez aussi que le nœud Appeler une fonction d'une DLL transmet les arguments à la fonction dans le bon ordre.
- Pour les tableaux ou chaînes de données, passez toujours un buffer ou tableau suffisamment grand pour les résultats que la fonction est susceptible de placer dans le buffer. Cependant, si vous les passez comme handles LabVIEW, utilisez les fonctions LabVIEW Manager pour les redimensionner sous les compilateurs Visual C++ ou Xcode.
- Si vous recevez un message, la cause est presque toujours une erreur dans le code de la bibliothèque partagée, comme l'écriture après la fin de la mémoire allouée pour un tableau. Notez que ces types de plantages peuvent se produire au moment où l'appel de la bibliothèque partagée s'exécute réellement sur le diagramme.
- Si vous souhaitez appeler une bibliothèque partagée qui contient des objets ActiveX, utilisez la fonction Automation Ouvrir avec le nœud de propriété et le nœud de méthode.
- Tous les appels à des bibliothèques partagées construites avec LabVIEW doivent spécifier Exécuter dans n'importe quel thread. Si vous configurez la fonction Appeler une fonction d'une DLL en utilisant des bibliothèques partagées construites par LabVIEW et que sélectionnez l'option Exécuter dans le thread IU, il se peut que LabVIEW donne lieu à un crash et nécessite un redémarrage.
- Les chaînes en Pascal ne dépassent pas 255 caractères.
- Le redimensionnement des tableaux et des chaînes ne peut avoir lieu que lorsque le nœud Appeler une fonction d'une DLL passe un handle de tableau LabVIEW ou un handle de chaîne LabVIEW. Redimensionnez les tableaux et les chaînes en utilisant des fonctions exportées via labviewv.lib vers un projet Visual C++ et liblvexports.a vers un projet Xcode
- N'oubliez pas que les chaînes en C sont NULL terminées. Si votre fonction DLL renvoie des données numériques dans un format de chaîne binaire, par exemple via GPIB ou le port série, elle peut renvoyer des valeurs NULL dans la chaîne de données.
Dépannage des bibliothèques partagées
Si vous voyez des erreurs lors de l'appel de bibliothèques partagées dans LabVIEW, consultez les conseils suivants pour vous assurer qu'il n'y a aucun problème avec la bibliothèque partagée que vous appelez.
- Vérifiez que les fonctions de bibliothèque partagée appelées par d'autres applications apparaissent dans la section EXPORTATIONS du fichier de définition de module ou que vous incluez le mot-clé _declspec (dllexport) dans la déclaration de fonction. Utilisez la directive d'export de fonction du compilateur C++, extern "C"{}, dans votre fichier d'en-tête pour que le compilateur C++ n'introduise pas de dépendance de plate-forme dans les noms de fonction exportés avec un procédé appelé décoration (ou name mangling en anglais) ; un exemple de code est représenté ci-dessous :
externe "C" {
/* vos prototypes de fonctions ici */
}
- N'oubliez pas que vous devez déclarer la fonction avec le mot-clé _declspec (dllexport) dans le fichier d'en-tête et le code source, ou la définir dans la section EXPORTATIONS du fichier de définition de module.
- Lorsque vous utilisez le mot-clé _declspec (dllexport) et que vous utilisez aussi la convention d'appel __stdcall, vous devez déclarer le nom de la fonction de bibliothèque partagée dans la section EXPORTATIONS du fichier de définition de module .def. En l'absence de fichier .def, __stdcall risque de tronquer les noms des fonctions selon un modèle imprévisible, de sorte que le nom réel de la fonction n'est pas disponible pour les applications qui appellent la bibliothèque partagée.
- Si une fonction n'a pas été exportée correctement, vous devez recompiler la bibliothèque partagée. Ne recompilez jamais la bibliothèque partagée tant qu'elle est chargée en mémoire par une autre application, par exemple, par votre VI. Avant de recompiler une bibliothèque partagée, assurez-vous que toutes les applications qui l'utilisent sont déchargées de la mémoire. Cela garantit que la bibliothèque partagée elle-même n'est pas chargée en mémoire lors de la recompilation. La bibliothèque partagée risque de ne pas se reconstruire correctement si vous oubliez ce point et que votre compilateur ne vous avertit pas. Cependant, la plupart des compilateurs vous avertissent lorsque la bibliothèque partagée est utilisée par une application.
- Essayez de mettre au point la bibliothèque partagée en utilisant le débogueur de niveau source fourni avec votre compilateur. En utilisant le débogueur de votre compilateur, vous pouvez définir des points d'arrêt, parcourir votre code, observer les valeurs des variables, etc. La mise au point avec des outils conventionnels peut être extrêmement bénéfique. Reportez-vous au manuel approprié de votre compilateur pour en savoir plus sur la mise au point.
- Appeler la bibliothèque partagée à partir d'un autre programme C est aussi une autre façon de mettre au point la bibliothèque partagée. En appelant la bibliothèque partagée à partir d'un autre programme C, vous avez un moyen de tester la bibliothèque partagée indépendamment de LabVIEW, vous aidant ainsi à identifier tout problème, plus tôt.
- Lorsque vous appelez une bibliothèque partagée LabVIEW qui passe un tableau 2D, vous devez d'abord déclarer la variable gestionnaire et initialiser la variable à NULL, comme le montre le code C suivant :
principal
{
/*Variable gestionnaire de données LabVIEW pour le tableau */
TD1Hd1myArray = NULL;
...
/* Appel à la fonction de bibliothèque partagée LabVIEW */
DLLFunctionalCall(&myArray);
...
}
Si vous n'initialisez pas la variable gestionnaire à NULL, le code produit une défaillance de protection générale lorsque vous appelez la bibliothèque partagée. - Pour permettre aux fonctions de bibliothèque partagée LabVIEW de s'exécuter sans interruption, LabVIEW retarde le traitement des messages du système d'exploitation jusqu'à la fin de tout appel aux fonctions de bibliothèque partagée ou jusqu'à ce que vous chargiez une fenêtre modale à partir de la bibliothèque partagée. Vous pouvez choisir de reporter les messages du système d'exploitation, comme les messages de clavier provenant de l'utilisateur, pour éviter d'appeler le même fichier de bibliothèque partagée alors qu'une fonction de cette bibliothèque partagée s'exécute. Par exemple, si une fonction d'une bibliothèque partagée est appelée parce que l'utilisateur a appuyé sur un bouton, l'utilisateur ne devrait pas pouvoir appuyer de nouveau sur le bouton tant que la fonction de la bibliothèque partagée n'a pas fini de s'exécuter. Lorsque LabVIEW retarde le traitement des messages du système d'exploitation, tous les appels de fonction à la même bibliothèque partagée LabVIEW sont mis dans une file d'attente. Cette file d'attente sera exécutée une fois l'appel de fonction de bibliothèque partagée d'origine terminé. Une fenêtre modale est un type de fenêtre qui reste active ou qui reste au premier plan par rapport à toutes les autres fenêtres jusqu'à ce que vous fermiez cette fenêtre ou que vous ouvriez une autre fenêtre modale. Si vous chargez une fenêtre modale à partir de la bibliothèque partagée, LabVIEW redéfinit le délai du processus et traite les messages pour que la fenêtre modale puisse devenir active. Vous ne pouvez pas interagir avec d'autres fenêtres tant qu'une fenêtre modale est ouverte. La plupart des boîtes de dialogue dans LabVIEW sont des fenêtres modales. Vous ne pouvez pas ouvrir de fenêtre non modale à partir d'un VI Callback de LabVIEW ni d'une bibliothèque partagée tant que tout autre processus est en cours. Si vous voulez que votre VI Callback ou bibliothèque partagée appelle une fenêtre non modale, vous devez le faire par programmation en effectuant les étapes décrites dans la rubrique VIs Callback.
- Vous pouvez choisir de retarder ou non les messages du système d'exploitation dans les bibliothèques partagées que vous construisez. Avant de construire la bibliothèque partagée, naviguez jusqu'à la page Avancé de la boîte de dialogue propriétés de la bibliothèque partagée et désélectionnez l'option Retarder les messages du système d'exploitation dans la bibliothèque partagée pour traiter les messages du système d'exploitation pendant l'exécution des fonctions de bibliothèque partagée.
- Les scénarios suivants peuvent provoquer l'erreur Aucune application ou bibliothèque d'exécution pouvant être mise au point n'a pu être trouvée.
- La bibliothèque partagée pouvant être mise au point n'a pas été chargée ou a été déchargée par l'application.
- Le fichier de configuration ini de la bibliothèque partagée, créé par Application Builder, n'a pas été distribué avec la bibliothèque partagée.
Contenu associé
- Appel de bibliothèques partagées dans LabVIEW
Appelez des bibliothèques partagées standard dans LabVIEW en utilisant le nœud Appeler une fonction d'une DLL. Pour une bibliothèque partagée qui contient des objets ActiveX, utilisez la fonction Automation Ouvrir avec le Nœud de propriété et le Nœud de méthode. Passez en revue le flux de travail typique, y compris les conseils de configuration et de mise au point.
- Configuring the Call Library Function Node
- Call Library Function Node - LabVIEW Programming Reference Manual
- Call Library Function Dialog Box - LabVIEW Programming Reference Manual
- LabVIEW Manager Functions - LabVIEW Programming Reference Manual
- Specifying the Location of Shared Libraries on Disk
- Utilisation du moteur d'exécution de LabVIEW
- Construction d'un prototype de fonction
- Automation Open Function - LabVIEW Programming Reference Manual
- Présentation du conteneur ActiveX
Utilisez le conteneur ActiveX pour intégrer des contrôles ou des documents ActiveX sur la face-avant d'un VI LabVIEW.
- VIs Callback
Un VI Callback contient le code que vous écrivez pour gérer un événement ActiveX ou .NET que vous spécifiez.
- Shared Library Properties Dialog Box - LabVIEW Programming Reference Manual