LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

importer dll MIL de Matrox

Bonjour à tous,

 

Je souhaiterais utiliser un FrameGrabber Matrox (Odyssey) sous Labview. Je souhaite seulement acquérir une image depuis cette carte.

 

J'ai cherché comment faire, et il me semble qu'utiliser la fonction "importer une bibiothèque partagée" est le plus simple.

Or, lorsque j'essaie d'importer ma dll "Mil.dll" :

 

1. Je ne peux pas importer la totalité de mes fonctions, et j'obtiens ce type de message : 

 

La bibliothèque partagée contient 223 fonctions. Les déclarations de 138 fonctions sont présentes et reconnues dans le fichier d'en-tête, et ces fonctions peuvent être encapsulées. Les autres fonctions ne peuvent pas l'être. Si vous voulez importer ces fonctions, consultez les messages de mise en garde à côté des fonctions ci-dessous. Vous devrez corriger les problèmes pour pouvoir continuer dans l'assistant.

 

MFTYPE32 long MFTYPE MfuncBufOffsetBand(MIL_BUFFER_INFO BufInfoPtr);

Les symboles non définis risquent d'empêcher l'assistant de reconnaître les fonctions et les paramètres. Pour corriger ce problème, vérifiez le fichier d'en-tête pour déterminer si vous devez ajouter des symboles prédéfinis. Cliquez sur le bouton Précédent pour retourner à la page précédente de l'assistant et ajouter un symbole prédéfini (par exemple, "NIAPI_stdcall = __stdcall" ou "NIAPIDefined = 1").
M_MIL_75_COMPATIBLE;M_MIL_USE_MEMORY_ALLOCATOR;M_MIL_USE_NT_WINDOWS;M_USE_MBUFBLIT;_INC_WINDOWS;_MSC_VER;_MT;_POSIX_SOURCE;_WINDOWS_;__GNUC__;__KERNEL__;__MSVCRT__;__MWINEXT__;__NO_MINGW_LFS;__TURBOC__;__USE_CRTIMP;__USE_MINGW_FSEEK;__WINDOWS_H;__WINDOWS__;__cplusplus;__midl;

 

 

2. Les fonctions importées ne le sont pas correctement, comme l'indique le journal d'erreur : 

 


"Mises en garde d'analyse du fichier d'en-tête :
Aucune erreur ni mise en garde à l'analyse du fichier d'en-tête.

Les erreurs et mises en garde suivantes sont survenues lors de la génération des VIs wrapper de cette bibliothèque partagée.

VI non exécutable
Le VI n'est pas exécutable pour l'une des raisons suivantes :
1. La bibliothèque partagée ou un fichier dépendant n'est pas installé. Pour que le VI soit exécutable, vous devez installer la bibliothèque partagée et tous les fichiers support sur l'ordinateur où vous exécutez le VI.
2. Une commande personnalisée requise est vide ou introuvable. Pour que le VI soit exécutable, mettez à jour la commande personnalisée manuellement.
3. Le VI comporte un paramètre dont le type de données n'est pas supporté. Pour que le VI soit exécutable, vous devez remplacer le cluster vide généré par l'assistant par une commande ou un indicateur qui utilise un type de données supporté.
    M Ptr To Int.vi
    Mapp Alloc.vi
    Mapp Child.vi
    Mapp Control.vi
    Mapp Control Thread.vi
    Mapp Free.vi

etc....

"

 

J'ai installé "Dependency walker" pour vérifier qu'aucune dépendance ne manque, et ça semble bon... (http://digital.ni.com/public.nsf/allkb/E32D92BF5241A203862573000004E06F?OpenDocument)

 

Je ne sais pas trop comment résoudre ce problème ! (Déjà, est le meilleur choix, d'après vous pour exploiter la librairie MIL de Matrox ?)

 

Merci,

 

cdlt,

 

B.L.

0 Kudos
Message 1 of 4
(3,211 Views)

Bonjour,

 

Quel est votre version de LV ? Votre config précisément ? Pouvez-vous nous fournir votre projet ainsi que des screenshot des messages d'erreurs affichés ? Avez-fait l'import de votre dll en suivant ce tutorial avec l'Import Shared Library wizard ?

Enfin pour répondre à votre dernière question, en se référant à cette KB (Can I Use My Third-Party Frame Grabber with the IMAQ VIs?) il est possible d'utiliser des frame grabber non-NI avec les VIs IMAQ. Toutefois il faudra convertir les images retournées en type tableaux de données 2D en format propriétaire, c.a.d. une image IMAQ et ce, avec l'aide du VI IMAQ ArrayToImage. Pour une solution plus simple il y a  Alliance Vision qui fournit un toolkit où sont développés des VIs natifs LV faisant justement appel aux fonctions dll de la librairie "Matrox pour LabVIEW". Vous trouverez plus d'informations sur ces liens : Matrox driver for LabVIEW & http://www.alliancevision.com/us/.

A l'avenir, pour poster en français je vous suggère de nous rejoindre sur le forum de la communauté française

 

Cordialement,

 

Message Edité par Steve M. le 01-10-2009 11:35 AM
Steve M.
0 Kudos
Message 2 of 4
(3,177 Views)

Bonjour,

 

Pour répondre dans l'ordre : 

 

Quel est votre version de LV ? --> Labview 8.5

 

Votre config précisément ?

Matériel : Core 2 Duo, 2.6GHz, 4Go Ram, Matrox Odyssey PCIx, NI PCI 6541 pour la génération des horloges du détecteur, NI PCI 6503utilisée comme bus pour la programmation de la carte du détecteur

Soft : Labview 8.5, Matrox MIL 8.0, Windows XP SP3

 

Pouvez-vous nous fournir votre projet ainsi que des screenshot des messages d'erreurs affichés ? Le projet labview concernant la partie « FrameGrabber » n’existe pas, puisque je n’ai pas de VI ! En ce qui concerne l’importation, j’ai joint un fichier qui résume les étapes que j’ai faites.

 

Avez-fait l'import de votre dll en suivant ce tutorial avec l'Import Shared Library wizard ? Oui, j’ai juste un doute pour l’étape 9 du tutoriel (appels de fonctions). J’ai donc tout laissé par défaut pour le moment.

 

Pour la solution de Alliance Vision : J’ai effectivement trouvé cette solution par mes recherches sur internet, mais une solution payante n’est pas à l’ordre du jour : Mon système fonctionne tel qu’il est, mais pour plus de confort je souhaiterais intégrer l’acquisition d’image dans mon programme Labview qui gère déjà le séquencement (PCI 6541) et la programmation (PCI 6503) de mon détecteur. Mais cela ne justifie pas cette dépense.

 

Enfin, concernant le fait que je n’ai pas posté dans la bonne communauté, est il possible de déplacer le sujet ?

 

Merci !

 

Cordialement,

Message Edité par BL_CNRS le 10-01-2009 01:43 PM
0 Kudos
Message 3 of 4
(3,163 Views)

Bonjour,

 

 

A ma connaissance je pense qu'il faut recréer un autre thread. Pour le problème que vous rencontrez, comme je vous le suggérais, certes la solution Alliance Vision est payante mais elle demeure plus simple. En effet cette KB définit le problème: Import Shared Library Wizard Reports Undefined Symbols.

Ceci est du au fait que l'import des DLL compilées orienté objet  n'est pas managée car le Call Library Function Node n'est pas capable de les instancier. Pour cela, il existe des fonctions en C qui permettent d’adapter ou wrapper les fonctions votre DLL afin de pouvoir la réutiliser dans LabVIEW. Enfin je vous invite à suivre ces liens indiqués en bas page de la KB mentionnée ci-dessus. :

Writing a Wrapper Function for an External Code Function

What is a Wrapper DLL and When Do I Need One?

How Do I Call a Dynamic Link Library (DLL) from LabVIEW?

 

Cordialement,

 

 

Steve M.
0 Kudos
Message 4 of 4
(3,157 Views)