PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → API dll
API dll
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