alopia
Messages postés11Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention10 janvier 2010
-
4 sept. 2008 à 14:13
alopia
Messages postés11Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention10 janvier 2010
-
5 sept. 2008 à 10:45
Bonjour,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
Ancien informaticien, je m’attaque pour la première fois à VB 2008 Express Edition, sous Vista. Je souhaite programmer une interface avec une station météo via un port série. Le constructeur fourni une DLL de fonctions avec deux fichiers : Vantadepro.dll et Vantagepro.lib ainsi que des exemples de programmation. Ces exemples font référence à une instruction : Import « vantagepro.lib »
Mais rien de tel dans VB 2008
Voici un morceau de mon code (pas propre car uniquement en test)
Imports System.Runtime.InteropServices
Public Class F_Démarrage
Dim Date_DTS As DateTimeStamp
Dim Retour As Long
Declare Auto Function DownloadData_V Lib "C:\Windows\System32\vantagepro.dll" _
(ByVal LaDate As DateTimeStamp) As Long
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1", 19200)
End Using
Date_DTS.DTS_Minute = 0
Date_DTS.DTS_Heure = 0
Date_DTS.DTS_Jour = 3
Date_DTS.DTS_Mois = 9
Date_DTS.DTS_Année = 2008
Retour = 0
Retour = DownloadData_V(Date_DTS)
Me.Retour.Text = Retour
End Sub
L’appel à la fonction de la DLL provoque l’erreur :
Impossible de trouver le point d'entrée 'DownloadData_V' dans la DLL 'C:\Windows\System32\vantagepro.dll'.
Par ailleurs l’enregistrement de la DLL via regsrv32 provoque le même type de problèmes (absence de point d’entrée).
Il semble donc qu’il soit nécessaire d’utiliser le fichier .lib
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 4 sept. 2008 à 16:00
le message d'erreur de Regsrv32 indique que ce n'est pas une Dll enregistrable, c'est à dire une Dll ActiveX.
Effectivement si il faut passer par un Import en C (et donc le fichier Lib) il est fort probable que la Dll soit de Type "Api", c'est à dire comme les Dll constituant le noyau de Windows (Kernel32, User32, ...)
Dans ce cas elle s'utilise effectivement en VB en déclarant chacune de ses fonctions à l'aide d'une instruction Declare.
Il faut que tu indique le point d'entrée de la fonction dans la dll. En gros c'est le nom de la fonction dans la dll :
Declare Function NomDansTonCode Alias NomDansLaDll Lib CheminDll (ListeParametres) As TypeRetour
Il faut que tu regarde la doc pour avoir ces infos.
Attention, ces infos sont souvent données pour VB6, en .Net, il faut apporter quelques corrections.
Par exemple tous les paramètres et valeur de retour de type Long sont à déclarer en Integer en .Net
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 4 sept. 2008 à 22:53
Salut,
L'Alias n'est pas indispensable lorsque NomDansTonCode = NomDansLaDll, mais ce n'est apparement pas le cas ici; la fonction DownloadData_V n'existe pas dans la DLL...
Vous n’avez pas trouvé la réponse que vous recherchez ?
alopia
Messages postés11Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention10 janvier 2010 5 sept. 2008 à 09:29
Bonjour, et merci pour toutes ces réponses.
Toutefois :
J'ai bien utiliser l'instruction Declare Function NomDansTonCode Alias NomDansLaDll Lib CheminDll (ListeParametres) As TypeRetour. A l'utilisation j'ai l'erreur : Impossible de trouver le point d'entrée 'DownloadData_V' dans la DLL 'C:\Windows\System32\vantagepro.dll'.
Je précise que la fonction existe bien, la même chose ce prduit pour toutes les fonctions.
J'ai également utiliser la méthode Pinvoke en utilisant DLLImport, le résultat est identique.
J'ai contacté le constructeur (au US) qui m'assure que chez lui tout fonctionne bien.
Alors vogue la galère ...
alopia
Messages postés11Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention10 janvier 2010 5 sept. 2008 à 10:25
Merci,
C'est une bonne piste, j'interroge l'éditeur de la DLL. Mais si c'est le cas il me faudra passer par C#. Encore un nouveau language! Bon je connais l'assembleur (c'est ça les vieux) , le pascal, le cobol, et VB jusqu'à VB6. Alors pourquoi pas ...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 5 sept. 2008 à 10:32
Ben, normalement si ta dll est utilisable en C#, elle l'est aussi en VB.Net.
C'est peut-être plutôt en C classique (non managé) qu'il te faudra l'utiliser.
Par exemple faire une dll en C qui utilise ta dll, mais qui ne fait que réexporter ses fonction en StdCall
alopia
Messages postés11Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention10 janvier 2010 5 sept. 2008 à 10:45
Oui,
J'attends la réponse de l'éditeur, mais c'est une bonne solution d'autant que je n'ai besoin que de 3 ou 4 fonctions de la DLL qui en contient une centaine. Bon il faudra apprendre à créer une DLL en C.