xyp
Messages postés15Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention16 avril 2008
-
20 déc. 2007 à 12:54
xyp
Messages postés15Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention16 avril 2008
-
21 déc. 2007 à 09:10
Bonjour,
J'ai besoin d'inclure une routine permettant de switcher un GPS du mode Sirf3 au mode NMEA 2.0
Le blem c'est que le MSComm semble bugué et n'envoie rien en binaire. MS est au courant et propose un correctif. Or lorsque je l'inclu dans mon code, ça me marque alors que le fichier coredll.dll est absent. C'est faux : il est bien présent dans le répertoire system32 de Windows, mais quand j'essai de l'inclure comme référence au programme, ça ne veut pas.
Je vous file le code. Qu'en pensez vous ?
Merci beaucoup pour votre aide.
XYP
Objets nécessaires :
1 Module nommé Moduleee1
1 Form nommée Form1
1 MSComm nommé Comm1, sur la Form1
1 boutton nommé Command1, sur la Form1
Code dans Module 1:
Option Explicit
Declare Function WriteFileL Lib "coredll" Alias "WriteFile" _
(ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Public Sub SendArrayData(ByVal hCommID As Long, baData)
Dim i, lRet, iWrite
For i = LBound(baData) To UBound(baData)
lRet = WriteFileL(hCommID, baData(i), 1, iWrite, 0)
Next
End Sub
Code dans Form 1 (La série de code hexa est la commande de switch du mode swirf3 au mode NMEA2.0) :
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 20 déc. 2007 à 13:51
Bonjour
CodeDll.dll c'est pour les PPC ?
Il me semble, je peux me tromper, que WriteFile est présente dans Kernel32.dll, elle sera peut-être plus à même de répondre à ton besoin.
Ta fonction
Public Sub SendArrayData(ByVal hCommID As Long, baData)
Dim i, lRet, iWrite
For i = LBound(baData) To UBound(baData)
lRet = WriteFileL(hCommID, baData(i), 1, iWrite, 0)
Next
End Sub
sera fonctionnelle (enfin je pense) comme cela :
Public Sub SendArrayData(ByVal hCommID As Long, baData)
Dim lRes as integer,iWrite as integer
lRet = WriteFileL(hCommID, baData(1), UBound(baData), iWrite, 0)
End Sub
Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
xyp
Messages postés15Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention16 avril 2008 20 déc. 2007 à 14:03
Salut,
Suivant ton conseil, j'ai remplacé coredll dans le module par kernel32... comme ceci :
Declare Function WriteFileL Lib "kernel32" Alias "WriteFile" _
(ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
le blem c'est que ça me provoque une erreur qui ferme VB6 : AppName: vb6.exe AppVer: 6.0.81.76 ModName: unknown ModVer: 0.0.0.0 Offset: ff30ff00
J'ai remplacé aussi la fonction par celle que tu me files, mais ça provoque une erreur de compilation "Type d'argument ByRef incompatible" sur iwrite.
Qu'en pensez vous ?
Merci beaucoup pour votre aide.
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 20 déc. 2007 à 14:22
Bonjour
Voici la déclaration de la fonction :
Public Declare Function WriteFile Lib "kernel32" Alias "WriteFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As Long
Pas de Byval pour lpOverlapped.
Normal, met IWrite en Long au lieu de Integer.
Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site
xyp
Messages postés15Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention16 avril 2008 20 déc. 2007 à 16:57
Ok le compilateur n'indique plus d'erreur, donc apparement ça envoit des donénes en binaire au GPS, ce que je cherchais à faire.
Mais bon ça switch pas pour autan entre le mode sirf3 et le mode nmea2.0, ce qui démontre que y'a un bug ailleurs, et je m'y penche ;)
Dès que j'ai trouvé, je ferai une ptite source pour indiquer comment switcher entre les deux moe à loisir.
Encore merci NHenry et fait de ma part une caresse au gros chat qui pose avec toi sur la photo ;)
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 21 déc. 2007 à 08:31
Bonjour
1 elle est pas grosse et de 2 c'est une vielle mémère.
Si ton GPS est sur port série direct (non virtuel), tu peux tenter de relier le Tx et le Rx pour voir ce qu'il t'envoie. Et si tu as 2 ports COM, c'est mieux, un cable NullModem et tu verra ce qui est envoyé.
Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
Mon site