PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Appel DLL écrite en C++
Appel DLL écrite en C++
Iniciado por Pascal Lemaire, 17,nov. 2006 10:59 - 2 respuestas
Publicado el 17,noviembre 2006 - 10:59
Bonjour,

J'ai un gros soucis avec l'appel d'une DLL C++ utilisée pour la lecture de carte électronique sur PPC

Header de la DLL :

SPRINGCARD_LIB LONG SPRINGCARD_API SCardListReaders(IN SCARD_CONTEXT_T hContext, IN LPCTSTR mszGroups, OUT LPTSTR mszReaders, IN OUT LPDWORD pcchReaders);

Appel en C

char [] SCardReaders= new char [1024];
uint len;
...
len= 1024;
rc = SCARD.ListReaders (SCardContext, null, SCardReaders, ref len);
...

En windev

nRcard est un entier
nLen est un entier
sSCardReaders est une chaîne sur 1024

...
nLen = 1024
nRCard=API( "springcard.dll", "SCardListReadersW", gnScardContext, null, sSCardReaders, &nLen )

J'ai systématiquement l'erreur "Le paramètre 3 n'est pas d'un type valide pour AppelDLL()"

Idem si chaine, buffer ou buffer sur 1024

Une idée ????

Merci

Pascal Lemaire
Publicado el 17,noviembre 2006 - 14:09
Petit complément d'information

typedef char TCHAR;
typedef TCHAR *LPTSTR;
Publicado el 18,noviembre 2006 - 08:13
Bonsoir,

J'ai un gros soucis avec l'appel d'une DLL C utilisée pour la lecture de
carte électronique sur PPC

Header de la DLL :

SPRINGCARD_LIB LONG SPRINGCARD_API SCardListReaders(IN SCARD_CONTEXT_T
hContext, IN LPCTSTR mszGroups, OUT LPTSTR mszReaders, IN OUT LPDWORD
pcchReaders);

Appel en C

char [] SCardReaders= new char [1024];
uint len;
..
len= 1024;
rc = SCARD.ListReaders (SCardContext, null, SCardReaders, ref len);
..

En windev

nRcard est un entier
nLen est un entier
sSCardReaders est une chaîne sur 1024

..
nLen = 1024
nRCard=API( "springcard.dll", "SCardListReadersW", gnScardContext, null,
sSCardReaders, &nLen )

J'ai systématiquement l'erreur "Le paramètre 3 n'est pas d'un type valide
pour AppelDLL()"

Idem si chaine, buffer ou buffer sur 1024

Une idée ????


- Avec WinDev mobile les chaines sont par défaut en Unicode. Donc si en C le
type char fonctionne, je pense qu'il faut utiliser : sSCardReaders est un
Buffer fixe sur 1024
- Pour moi, le troisième parametre dont parle l'erreur ne désigne pas
sSCardReaders mais gnScardContext (Troisième paramêtre passé à la fonction
API)

Cordialement,
Guillaume M.