Newsgroup: it.comp.lang.c++
Titolo: le DLL servono durante la fase di build????

Ciao,chiedo per favore aiuto
 
domanda specifica che probabilmente avrà risposta di validità generale
 
premessa
FTDI costruisce integrati che facilitano la vita a chi vuole fare comunicare 
un circuito attraverso USB.
C'è i comodo modo VirtualCom in cui viene emulata una seriale
 
io invece dovrei usare la DLL FTD2XX.dll  contenente funzioni il cui 
prototipo  è in FTD2XX.h
 
 
in FTD2XX.h  sono dichiarate FT_Open e FT_ListDevices   ,implementate 
effettivamente entrambe nella DLL
 
se nel codice del mio programmino  sviluppato col vecchio C++Builder 
3.0(...)
chiamo la funzione FT_Open e lancio il build tutto OK
se chiamo             FT_ListDevices   ho 1 errore:
[LinkerError] Unresolved external 'FT_ListDevices'   referenced from 
D:\\.....
 
non capisco perchè una si e una no...
 
NB!!ancora (per me)più strano
 
se elimino la DLL in questione da /system32 e da ogni altra cartella 
inerente al progetto a build-time ho gli stessi risultati!
FT_Open che non dovrebbe essere definita in nessuna DLL accessibile se 
chiamata non dà problemi(a build-time)
Come mi aspetto a run time ho errore  DLL non trovata
 
Domanda ,a build time non serve che vi sia in giro la DLL contenente le 
funzioni chiamate per ora solo nel codice del .cpp??????
 
Allora rinomino FT_Open FT_pippo sia nel .h che nel cpp supponendo che il 
nome FT_Open esista solo in questi due files,aspettandomi che  la coerenza 
dei nomi mi dia  un build senza errori ,e invece no:
[LinkerError] Unresolved external 'FT_pippo'
 
DOMANDA:dov'è che il linker va a cercare l'esistenza di queste funzioni se 
non ho più la DLL?
 
Probabilmente devo ripassarmi l'ABC ma dopo un pò di ore mi sono deciso a 
cercare aiuto
 
Grazie
 
 
 
 

 non ho più la DLL?
 
nel file .lib
 
 
 

Ciao,chiedo per favore aiuto
 
Hai 2 alternative :
 
hai il file di importazione della libreria (estensione .LIB) e lo
colleghi al progetto
 
usi le funzioni LoadLibrary e GetProcAddress del SO che presumo sia
WIN
 
E' importante capire comunque se la DLL in questione esporta le sue
funzioni in stile C nel qual caso entrambi i metodi funzionano.
Se invece i nomi delle funzioni sono state codificati attraverso la
convenzione del C++ l'uso del 2 metodo e' piu complicato perche i nomi
non sono uguali a quello che appaiono nel file header.

 non sono uguali a quello che appaiono nel file header.
 
nell header le dichiarazioni sono precedute da
 
#ifdef __cplusplus
extern "C" {
#endif
 
penso proprio per chiamare secondo le convenzioni del C
 
cosa scappa ancora?
 
 
 
 

intendi dire che il linker le usa?
 
Se non hai il file di importazione della DLL devi per forza usare le
funzioni che ti ho detto.
Le invochi direttamente dal tuo programma (il linker non c'entra
niente).
Se le funzioni falliscono potrebbe essere che il nome della funzione
non corrisponda a quello nel file header. Se ben ricordo mi sembre che
i compilatori della Borland anteponevano il carattere _ (underscore)
davanti al nome della funzione esportata in una DLL. Se neanche in
questo modo funge, allora non ti rimane che provare con l'ordinal
value. 
Estremo estremo mi mandi i 2 file (DLL,H) e vedo se riesco a tirarti
fuori la relativa librearia di importazione LIB.
 
Ciao



 
Ciao
Dipendeva dal fatto che nel file FTD2XX.lib non vi era il collegamento alla
funzione che non riuscivo a richiamare
Ho usato un utilità DOS ,IMPLIB.exe che dalla dll genera il file LIB con le
corrispondenze per ogni funzione
Adesso funziona tutto,
grazie ancora
 
 

Ho usato un utilità DOS ,IMPLIB.exe 
 
Infatti,
se non riuscivi con la GetProcAddress e mi mandavi i file e la stessa
procedura che avrei seguito io.
Ciao.