|
| Iniciado por alex.benaji, 11,jun. 2020 00:06 - 9 respuestas |
| |
| | | |
|
| |
| Publicado el 11,junio 2020 - 00:06 |
Bonjour, j'essaye de communiquer avec un scanner de cheque, selon le constructeur la fonction suivante permet de retourner le non de la machine :
MTMICRGetDevice function returns the device name of the device present in the system.
ULONG MTMICRGetDevice ( DWORD dwDeviceContext, char *pcDevName );
Parameters dwDeviceContext : This is the device number of the device. This must be set to 1 to get the first device in the system. Increment it by 1 to get the next device name.
pcDevName : Pointer to the buffer where the device name will be stored.
Return Values MICR_ST_OK MICR_ST_DEVICE_NOT_FOUND MICR_ST_BAD_PARAMETER
mon code en WD
retAPI est une chaîne pcDevName est une chaîne dwDeviceContext est un entier = "1" nInst est un entier nInst = ChargeDLL("mtxmlmcr.dll")
SI nInst = 0 ALORS Erreur(ErreurInfo()) SINON retAPI = API("mtxmlmcr.dll","MTMICRGetDevice",dwDeviceContext,pcDevName) Trace(retAPI + TAB + bufDevname) FIN
probleme est que retAPI me retourne un nombre (51) !! alors que ca devrai retourner une chaine parmi les Return Values!!
merci d'avance |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 11,junio 2020 - 08:17 |
Bonjour,
Non, MTMICRGetDevice retourne un ULONG. Tes return values ne sont que des constantes.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 11,junio 2020 - 08:22 |
Bonjour, retAPI est la valeur de retour de l'API Les valeurs de retour sont des constantes (donc à priori des entiers) : MICR_ST_OK MICR_ST_DEVICE_NOT_FOUND MICR_ST_BAD_PARAMETER
Par ailleurs dwDeviceContext doit être à 1 pour le premier appel or tu lui envoies 0 ("1") 51 doit correspondre à MICR_ST_BAD_PARAMETER. Enfin, dans ton trace, tu devrait faire apparaître pcDevname et non bufDevname. Dans la mesure où il n'a été déclaré nulle part, il est d'ailleurs étonnant que tu n'ai pas eu d'erreur de compilation.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 11,junio 2020 - 10:02 |
D'ailleurs il me semble qu'il faille passer l'adresse de pcDevName soit &,pcDevName.
Ca donnerait donc
retAPI est une chaîne pcDevName est une chaîne dwDeviceContext est un entier = 1 nInst est un entier nInst = ChargeDLL("mtxmlmcr.dll")
SI nInst = 0 ALORS Erreur(ErreurInfo()) SINON retAPI = API("mtxmlmcr.dll","MTMICRGetDevice",dwDeviceContext,&pcDevName) Trace(retAPI, pcDevName) FIN
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 11,junio 2020 - 10:17 |
Une remarque connexe, il est fort possible -Dans le pire des cas que l'API récupère tous les périphériques -Dans un cas intermédiaire les périphériques du constructeur -Que tu connectes plusieurs scanners de ce types.
Je te conseille donc de boucler (tant que retAPI=MICR_ST_OK) en incrémentant dwDeviceContext et de socker le nom du périphérique (pcDevName) dans un tableau de chaines
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 11,junio 2020 - 11:51 |
Bonjour Dans le code de Philippe SB je ne suis pas sur que «Trace(retAPI, pcDevName)» n'affiche autre chose que la valeur du pointeur. Il faut faire un : Trace(ChaîneRécupère(pcDevName, crAdresseASCIIZ)) pour avoir la chaine.
-- « L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 948 mensajes |
|
| Publicado el 11,junio 2020 - 11:59 |
ne pas tenir compte de mon message c'est une grosse erreur !
-- « L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi |
| |
| |
| | | |
|
| | |
| |
| Publicado el 11,junio 2020 - 23:24 |
Merci pour vos reponses, j'ai tout essayé mais rien ne marche...
retAPI est un entier système pcDevN est un Variant
nInst est un entier nInst = ChargeDLL("mtxmlmcr.dll")
SI nInst = 0 ALORS Erreur(ErreurInfo()) SINON POUR nIndice = 1 À 10 retAPI = AppelDLL32("mtxmlmcr.dll","MTMICRGetDevice",nIndice,pcDevN) Trace(retAPI + TAB+ pcDevN) //VariantConvertit(pcDevN, wlChaîne) FIN FIN
ca me retourne 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0 51<TAB>0
jai trouve ce code en VB, le meme principe mais windev apparement ne donne rien!!
Declare Function MTMICRGetDevice Lib "mtxmlmcr" (ByVal dwDeviceContext As Long, ByVal DeviceName As String) As Long
While ReturnCode = 0 DevCon = DevCon + 1 NewDeviceName = Space(200) ReturnCode = MTMICRGetDevice(DevCon, NewDeviceName) If ReturnCode = 0 Then ExcellaDeviceName = Trim$(NewDeviceName) If Len(ExcellaDeviceName) > 1 Then cboDeviceName.AddItem Left$(ExcellaDeviceName, Len(ExcellaDeviceName) - 1) LogStatus " Adding " & Left$(ExcellaDeviceName, Len(ExcellaDeviceName) - 1) End If End If Wend |
| |
| |
| | | |
|
| | |
| |
| Publicado el 12,junio 2020 - 00:47 |
du progres.., jai assigne a PcDevN la valeur " " est la soudainement ca me retourne la liste!! une idee sur cet espace, est il possible de le faire autrement?
retAPI est un entier PcDevN est une chaîne = " "
nInst est un entier nInst = ChargeDLL("mtxmlmcr.dll")
SI nInst = 0 ALORS Erreur(ErreurInfo()) SINON POUR nIndice = 1 À 6 retAPI = AppelDLL32("mtxmlmcr.dll","MTMICRGetDevice",nIndice,PcDevN) Trace(retAPI + TAB+ PcDevN) //VariantConvertit(pcDevN, wlChaîne) FIN FIN |
| |
| |
| | | |
|
| | |
| |
| Publicado el 12,junio 2020 - 09:42 |
Alex avait énoncé :
Bonjour, j'essaye de communiquer avec un scanner de cheque, selon le constructeur la fonction suivante permet de retourner le non de la machine :
MTMICRGetDevice function returns the device name of the device present in the system.
ULONG MTMICRGetDevice ( DWORD dwDeviceContext, char *pcDevName );
Parameters dwDeviceContext : This is the device number of the device. This must be set to 1 to get the first device in the system. Increment it by 1 to get the next device name.
pcDevName : Pointer to the buffer where the device name will be stored.
Return Values MICR_ST_OK MICR_ST_DEVICE_NOT_FOUND MICR_ST_BAD_PARAMETER
mon code en WD
retAPI est une chaîne pcDevName est une chaîne dwDeviceContext est un entier = "1" nInst est un entier nInst = ChargeDLL("mtxmlmcr.dll")
SI nInst = 0 ALORS Erreur(ErreurInfo()) SINON retAPI = API("mtxmlmcr.dll","MTMICRGetDevice",dwDeviceContext,pcDevName) Trace(retAPI + TAB + bufDevname) FIN
probleme est que retAPI me retourne un nombre (51) !! alors que ca devrai retourner une chaine parmi les Return Values!!
merci d'avance
en déclarant une chaine fixe sur 200 ou une chaine ASCIIZ sur 200 peut être
-- Cordialement JeAn-PhI |
| |
| |
| | | |
|
| | | | |
| | |
|