Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ma le DLL servono durante la fase di build????
Forum - C/C++ - Ma le DLL servono durante la fase di build????

Avatar
diegotrex (Normal User)
Newbie


Messaggi: 3
Iscritto: 12/01/2012

Segnala al moderatore
Postato alle 17:44
Giovedì, 12/01/2012
Ciao,chiedo per favore aiuto

domanda specifica che probabilmente avrà risposta di validità generale


io invece dovrei usare la DLL FTD2XX.dll  contenente funzioni il cui
prototipo  è in FTD2XX.h.Vengono fornite da una casa costruttrice di circuiti integrati.


in FTD2XX.h  sono dichiarate FT_Open e FT_ListDevices   ,implementate
effettivamente entrambe nella DLL(verificato con una utility PE explorer)

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"

Ma come???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?


Grazie




PM Quote
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 19:14
Giovedì, 12/01/2012
Le funzioni le trova nei file header, per questo all'inizio devi includere gli header con
Codice sorgente - presumibilmente C/C++

  1. #include "header.h"



Per far funzionare il programma devi avere la DLL nella directory dove si trova l'eseguibile.

Spero di aver capito ciò che chiedevi... Ciaoo :)

Ultima modifica effettuata da RiccardoG97 il 12/01/2012 alle 19:15


"Il sangue ha il sapore del ferro"
PM Quote
Avatar
Nullable (Normal User)
Expert


Messaggi: 217
Iscritto: 12/07/2011

Segnala al moderatore
Postato alle 20:10
Giovedì, 12/01/2012
Testo quotato

Postato originariamente da RiccardoG97:
Per far funzionare il programma devi avere la DLL nella directory dove si trova l'eseguibile.



Non solo, deve anche linkarla tramite il suo IDE. Che IDE usi ?


Hai perso.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:32
Giovedì, 12/01/2012
No ... no ...

1) il file .h è solamente un file include che contiene i prototipi delle funzioni (non contiene codice delle funzioni=

2) la DLL è la libreria che contiene il codice delle funzioni che "a runtime" (dinamicamente appunto) vengono utilizzate dal codice che hai compilato

3) quando compili il codice C/C++ è necessario indicare il file .lib (che sarà FTD2XX.lib) che è la import lib necessaria alla risoluzione degli entry point per il linker


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 22:01
Giovedì, 12/01/2012
nessuno ha ragione scusate per la mia svista.... Devo cercare di essere Piu preciso 8-|


"Il sangue ha il sapore del ferro"
PM Quote
Avatar
diegotrex (Normal User)
Newbie


Messaggi: 3
Iscritto: 12/01/2012

Segnala al moderatore
Postato alle 22:33
Giovedì, 12/01/2012
ciao,grazie Nessuno e a tutti quelli che hanno dedicato attenzione al mio problema.


Forte del parere di Nessuno ho cercato in tutto il disco C se vi fossero ancora dei filesFTD2XX.lib.....e ce ne era uno che era in una delle directories in cui  il Borland C++Builder (l'IDE che uso,per rispondere a RiccardoG97) si andava a cercare le librerie...togliendolo non mi ha più linkato la funzione "buona".Probabilmente vi sarà un incoerenza riguardante la funzione "non" buona che vedrò di risolvere,magari nella libreria manca completamente.
Sempre a Riccardo assicuro che l'header era incluso,ma non sono d'accordo sul fatto che devi avere DLLe eseguibile nello stesso file.Lo dico solo perchè avendo la DLL in system 32 il programma gira(forse gira male.vedrò ma non ho avviso di errori)

Vi ringrazio tutti per il costruttivo aiuto:k:
Ciao da Diego

PM Quote