Newsgroup: it.comp.programmare.win32
Titolo: Link delle DLL,help!

Salve a tutti,
non riesco a utilizzare le funzioni esportate da una DLL nell'ambiente di
lavoro di Visual Studio 6.
Vi spiego meglio.
Io ho sempre utilizzato una dll includendo il suo progetto  all'interno del
workspace del programma che doveva utilizzare le funzioni
della DLL. Questo era possibile perchè le DLL le facevo io stesso per cui
avevo i sorgenti e il progetto VC.
Il problema è che ho scaricato una DLL per alcuni controlli, il pacchetto
che ho scaricato è composto di 3 file libreria.dll, libreria.exp,
libreria.lib.
Cosa devo fare in Visual studio per dirgli di importarmi le funzioni della
DLL attraverso la libreria .lib?
Ho provato anche ad inserire il percorso del file ".lib" nella lista delle
librerie che il linker compila ma nulla, la dll non viene caricata.
Qualcuno può essere così gentile da spiegarmi i vari passaggi per utilizzare
una ".dll" di cui non si hanno i sorgenti ma solo il file .exp e il file
.lib?
Grazie a tutti e scusate se mi sono dilungato nella mia spiegazione.
Saluti a tutti
Sardone

Ciao, sardone!
Il giorno 11/11/2003 alle ore 09:30 hai scritto:
 s> Ho provato anche ad inserire il percorso del file ".lib" nella lista
 s> delle librerie che il linker compila ma nulla, la dll non viene
 s> caricata.
Magari prova anche a mettere il nome della libreria nella lista delle
librerie.
Bye


Ho provato ad inserire il nome della libreria nella dialog "settings", nel
tab "link",
nel campo di testo riservato alle librerie "Object/library modules" ma
nulla, la compilazione avviene senza problemi ma il
linker non riesce a trovare le funzioni della DLL.
Bhooo!!
Saluti e grazie
Sardone

Ciao, sardone!
Il giorno 11/11/2003 alle ore 09:50 hai scritto:
 s> Ho provato ad inserire il nome della libreria nella dialog "settings",
 s> nel tab "link",
 s> nel campo di testo riservato alle librerie "Object/library modules" ma
 s> nulla, la compilazione avviene senza problemi ma il
 s> linker non riesce a trovare le funzioni della DLL.
Forse stai usando una libreria C in C++ senza le opportune segnalazioni ?
Tipo mettere in testa all'header la clausola extern "C" ?
Bye


Qui mi sembra che manchi il file header (il file.h per intenderci)
Esiste?
ciao
------------------------
http://visualwx.altervista.org/
nuova release 0.77e [freeware]
VisualWx rad per c++,python,perl,lua e wxwindows

Ok, grazie a tutti dell'aiuto, ho risolto il problema.
Allora, l'errore che facevo era quello di inserire la dll nella cartella
dove il compilatore inseriva l'eseguibile compilato (Debug o Release per
intenderci).
Visual Studio non cercava lì la dll ma una directory indietro, allo stesso
livello dei file di progetto ("*.dsw, *.dsp)
Ho spostato la DLL nella directory in questione tutto funziona, le funzioni
vengono linkate correttamente.
Grazie a tutti dell'aiuto.
Saluti
Sardone

 Esiste?
Non e' _necessario_ il .h per le DLL (ne il .lib :). Sono *D*LL :) 
cioe' il linking avviene *dinamicamente*, e ti basta usare le API 
LoadLibrary()/FreeLibrary()/GetProcAddress() ecc. [...ovvio che poi 
serve sapere i prototipi delle funzioni per usarle].
Cmq, su questo stesso NG il problema delle DLL e' stato gia' affrontato 
altre volte... google e' nostro amico :)
Ciao,
Dan

serve sapere i prototipi delle funzioni per usarle].
... il che equivale a dire che hai bisogno il .h :-)
Ok, non per l'inclusione "reale" nel progetto ma per avere il
prototipo delle funzioni :-)
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
despammed.com


Secondo me è molto più importante il file.h che non tutto il resto.Senza
sapere che tipi di variabili è praticamente impossibile usare una dll e di
conseguenza è indispensabile che ci sia.Ci fai poco o nulla con loadlibrary
se non conosci questi parametri


 prototipo delle funzioni :-)
Posso anche avere i prototipi in un file di testo o di word o di quello 
che e', che non e' parente del .h, o se sono abbastanza bravo (non e' il 
mio caso) posso cercare di capire il prototipo delle funzioni facendo 
una sorta di reverse dalle DLL.
Ho scritto che il .h *non e' necessario* e lo confermo :)
Ciao :)
Dan

 Ho scritto che il .h *non e' necessario* e lo confermo :)
1) non basta il prototipo della funzione in quanto potrebbe avere puntatori
a strutture o riferimenti o qualsiasi altra cosa che tu non conosci e senza
quest'ultime tu non userai mai la dll se non con un reverse completo del
codice della funzione.
2) avere un file dove ci sono tutti i tipi di variabili e dichiarazioni
delle funzione equivale appunto al file.h.Per quanto riguarda l'uso con una
lib gia fornita con la Dll, l'uso di loadlibrary e company non č necessario
anzi di solito,come succede per l'uso delle altre funizoni dell'api,viene
nascosto.
Dire che  l'header non serva č assolutamente sbagliato visto che potrebbe
essere estremamente complicato capire il codice che ne fa uso (non ho detto
impossibile anche se forse con accurati accorgimenti potrebbe diventarlo )
..


 Dire che  l'header non serva č assolutamente sbagliato 
E invece secondo me non e' per niente sbagliato.
Poi chiaramente ognuno ha le sue idee... :)
(Il fatto che io non sappia programmare in Assembly per Windows non mi 
autorizza a dire: "programmare a basso livello Windows in assembly e' 
<<assolutamente sbagliato>>".)
Mah... comunque per quel che mi riguarda termino qui il thread. :)
Bye

 <<assolutamente sbagliato>>".)
qui c'entra relativamente programmare a basso livello..
esempio:
se nei parametri della funzione contenuta in una dll, vengono richiesti
diversi ptr a funzione e relative strutture  da usare per le stesse
funzioni:
funcdll((ptrfunc1*)(param1,param2,param3,param4),struct_per_ptrfunc1 *ptr,
... )
e magari non viene richiesto solo un ptr a funzione ma diversi..
Mi spieghi come farai con il reverse senza sapere che tipo di
funzioni,strutture che possono avere decine di variabili, o altre tipi di
dati senza avere un header di riferimento ?
(si farà fatica anche con l'header senza un'oppurtuna documentazione, ma
sicuramente avrai molte informazioni in più)
ciao :)
