Newsgroup: it.comp.lang.visual-basic
Titolo: dichiarazione api

ciao a tutti.
Scusate, ma non so proprio come fare a dichiarare in vb  questa api: LONG
SCardConnect(
  IN SCARDCONTEXT hContext,
  IN LPCTSTR szReader,
  IN DWORD dwShareMode,
  IN DWORD dwPreferredProtocols,
  OUT LPSCARDHANDLE phCard,
  OUT LPDWORD pdwActiveProtocol
);
qualcuno mi puņ aiutare ?
grazie in anticipo Simo


 Simone racconta in giro che
Simone chi?
www.allapi.net
-- 
Morfeus®
Free Joint
 :PII

 
www.allapi.net
in effetti qui non c'è!!
indago.............


 ha scritto nel messaggio
news:bds5c4$10aicv$1...@ID-191912.news.dfncis.de...


 Simone
Ma sai almeno il nome della libreria che eXporta tale Api?


 ha scritto nel messaggio
news:bds7mp$10c1ue$1...@ID-191912.news.dfncis.de...


 Simone
ecco simone non riesco ad entrare in quella libreria non trovo il punto di
ingresso
è difficile senza specifiche tecniche...mmmm
ad ogni modo prova a dare un'occhiatina da queste parti
http://online.infomedia.it/riviste/cp/91/articolo19/articolo.htm
ciao
P.S. ma si può sapere cosa stai facendo???


"winscard"...può essere di aiuto ? sob :(
Dunque... proviamo...
Questa e' la dichiarazione da convertire e si trova in winscard.h:
LONG SCardGetStatusChange(
  IN SCARDCONTEXT hContext,
  IN DWORD dwTimeout,
  IN OUT LPSCARD_READERSTATE rgReaderStates,
  IN DWORD cReaders
);
le definizioni dei tipi sono:
typedef ULONG_PTR SCARDCONTEXT; 
	dove #define ULONG_PTR    DWORD 
mentre LPSCARD_READERSTATE e' una struttura che cambia a seconda che
si usi ANSI oppure Unicode:
typedef struct {
    LPCSTR      szReader;       // reader name
    LPVOID      pvUserData;     // user defined data
    DWORD       dwCurrentState; // current state of reader at time of 
					call
    DWORD       dwEventState;   // state of reader after state change
    DWORD       cbAtr;          // Number of bytes in the returned ATR
    BYTE        rgbAtr[36];     // Atr of inserted card, (extra 	
					alignment bytes)
} SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;
#ifdef UNICODE
typedef SCARD_READERSTATEW SCARD_READERSTATE;
typedef PSCARD_READERSTATEW PSCARD_READERSTATE;
typedef LPSCARD_READERSTATEW LPSCARD_READERSTATE;
#else
typedef SCARD_READERSTATEA SCARD_READERSTATE;
typedef PSCARD_READERSTATEA PSCARD_READERSTATE;
typedef LPSCARD_READERSTATEA LPSCARD_READERSTATE;
#endif // UNICODE
La dichiarazione in vb della funzione "potrebbe" (non l'ho mai usata e
non so cosa faccia) essere cosi':
Private Declare Function SCardGetStatusChange lib "winscard.dll" _
	( _
	ByVal hContext As Long, ByVal dwTimeout As Long, _
	ByRef rgReaderStates As LPSCARD_READERSTATE, _
	ByVal cReaders As Long _
	) As Long	
La vera patata bollente pero' e' la struttura LPSCARD_READERSTATE,
che provo ad azzardare cosi': preparati a spettacolari crash :-)
' usiamo quella ANSI
Private Type LPSCARD_READERSTATE
    szReader	As Long		'puntatore al nome del lettore
    pvUserData	As Long		'puntatore ai dati utente
    dwCurrentState As Long	'stato del lettore PRIMA
    dwEventState As Long   	'stato del lettore DOPO
    cbAtr	As Long         'numbero di byte ritornati nell'ATR
    rgbAtr[0 To 35] As Byte     'ATR
End Type
Occorre poi un modo per copiare il valore del puntatore in szReader.
Potresti provare allocando un blocco di memoria, cosi':
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Const GHND = &H42
' Allocate moveable global memory.
hGlobalMemory = GlobalAlloc(GHND, Len(strNomeLettore) + 1)
' Lock the block to get a pointer to that memory
lpGlobalMemory = GlobalLock(hGlobalMemory)
' Copy the string to the allocated global memory.
lpGlobalMemory = lstrcpy(lpGlobalMemory, strNomeLettore)
' Now you can unlock the memory.
GlobalUnlock(hGlobalMemory)
Adesso copi il valore del puntatore nel campo della struttura:
structReaderState.szReader = lpGlobalMemory
Una tecnica analoga potrebbe essere usata per il puntatore a
pvUserData, magari puoi provare a metterci 0: se va in crash
vuol dire che non gli piace.
Fai un po' di prove e facci sapere: se arriviamo ad una conclusione
positiva, potresti poi, alla fine, postare il codice giusto in modo
che rimanga per chi, in futuro, dovesse trovarsi nella tua stessa
situazione di oggi.
-- 
ciao, hal
N.B. il codice che ho scritto e' *AS IS*, assolutamente non testato.

 situazione di oggi.
Eh già però stranissimo che invece simone si sia solo limitato a questa
parte del codice mentre per arrivare qui la connessione sulla smart dovrebbe
essere già aperta
almeno poteva semplificarci la vita già all'inizio...:(
Bah! Provoco un pò ;)
Della serie ti mostro il meno possibile, a me riesce difficile aiutare le
persone
in questo modo...
Ciao
Alessandro


 ha scritto nel messaggio
news:bdsrd5$10ti8o$1...@ID-191912.news.dfncis.de...


 no no..ehm
si però io le parole le dico al punto giusto e al momento giusto
del resto l'ho pure scritto che provocavo ;)
Avevo capito che volevi smanettare con le Smartcard hai letto
il link due post più sopra?
Dovevo fare lo psicologo eehehe


cmq ho provato la soluzione Hal...dice che nn trova il punto d'ingresso..
Ecco l'inghippo: la funzione viene esportata in due versioni, una ANSI
e l'altra Unicode (tant'e' che esistono due versioni della malefica
struttura che riceve come parametro).
Tu devi usare la versione ANSI per l'esempio che abbiamo fatto, quindi
la declare diventa press'a poco cosi' (verifica perche' sbaglio sempre
la sequenza dei modificatori delle declare):
Private Declare Function SCardGetStatusChange _
	Lib "winscard.dll" _
	Alias "SCardGetStatusChangeA" _
	( _
	ByVal hContext As Long, ByVal dwTimeout As Long, _
	ByRef rgReaderStates As LPSCARD_READERSTATE, _
	ByVal cReaders As Long _
	) As Long	
-- 
ciao, hal

 ha scritto nel messaggio
news:bdt1dh$1083ad$1...@ID-191912.news.dfncis.de...


nn sono scappato..ci sto lavorando...troppo forse...
;-)
poi, se ne hai voglia, facci sapere qualcosa ;-)
-- 
ciao, hal