Newsgroup: it.comp.programmare.win32
Titolo: risorse in libreria statica

come da titolo, è possibile mettere delle risorse (nello specifico, una
dialog) in quella che Visual C++ chiama una "libreria statica", ovvero un
progetto compilato come file obj da linkare successivamente ad un altro
progetto? le risorse vanno a finire anche nel progetto finale a cui linko
il file obj?
il mio problema è che sono riuscito a creare la "libreria" con il
corrispettivo file .lib; ho analizzato il lib col PEView e vedo che
contiene dei riferimenti a un certo file "res.res" contenente le mie
risorse; nel file obj però queste risorse non le vedo (il file res.res
ovviamente ci sta).
come devo fare per fare si che le risorse contenute in res.res vadano
anche nell'eseguibile finale dell'altro progetto?
grazie, e scusate se sono stato ripetitivo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

un file .res è equivalente, nel concetto, al file .obj.
Quindi lo devi utilizzare nello stesso modo. Lo aggiungi al progetto
(nella sezione link) come ci aggiungi i file .obj o .lib.

 (nella sezione link) come ci aggiungi i file .obj o .lib.
grazie per la risposta, ma ho provato a linkarlo con pragma comment e mi
dice "invalid file format; library ignored" (riferito al res); allora ho
provato ad aggiungerlo nella pseudocartella "Sources" del progetto (uso
Visual C++ 6) e mi dice "res.res already specified; additional resource
file ignored"; non capisco assolutamente come mai dica "already
specified"... non l'ho specificato da nessuna parte!! quando l'ho aggiunto
il pragma comment l'avevo tolto e ho fatto un Rebuild... :S
comunque ho aperto il .res sempre col PEView e il formato non è PE... :|


ho appena fatto due prove :-)
1° prova) ho inserito il file resource.res nella pseudocartella
resource files (naturalmente dopo aver tolto il file .rc) e me lo ha
linkato tranquillamente.
2° prova) ho aggiunto il file .res nelle proprietà del progetto,
nella sezione linker->input->dipendenze aggiuntive. Di nuovo lo ha
linkato correttamente.
Non sto usando il VC++6 e non ricordo se il percorso nelle proprietà
fosse lo stesso, ma penso che il primo caso valga anche per il VC++6.

ovviamente ci sta).
Menu Project -> Setting...
Tab Resources
Nel campo "Resource file name" ci ficchi il tuo .res
Esempio: Release/res.res

 Esempio: Release/res.res
OMG... ne posso linkare uno solo??? T__T
doh... io ne ho due: ho l'rc del progetto prncipale il res nel progetto
della libreria statica... non c'è modo di mettere nell'eseguibile finale
entrambe le risorse?


 linkato correttamente.
come hai fatto a verificare che sia stato "linkato correttamente"? PEView?
comunque da quello che ha scritto Goodidea mi sa che il mio errore è di
volerne linkare due... T_T



Beh, avevo delle immagini nelle risorse :-)
Non ci sono problemi a linkarne più di uno, il problema si pone solo
se si sovrappongono gli identificatori

entrambe le risorse?
Metti nel workspace un nuovo progetto che crea semplicemente una
.res dai due .rc

 ..res dai due .rc
ma scusa se ne posso linkare uno solo, quando compilo questo nuovo
progetto il linker non dovrebbe darmi lo stesso errore...?


 
girando nel MSDN ho trovato questo:
Linker Tools Error LNK1241 resource file 'resource file' already specified
This error is generated if you run cvtres manually from the command line
and if you then pass the resulting .obj file to the linker in addition
to other .res files.
To specify multiple .res files, pass them all to the linker as .res 
files, not from within .obj files created by cvtres.
In pratica dice che puoi usare più file .res (il rischio di collisione è 
a tuo carico), ma non devono essere rinominati. Quando metti una .res in 
libreria, probabilmente poi la vede come un .obj.
Quindi toglilo dalla libreria e lo linki insieme al nuovo .rc

progetto il linker non dovrebbe darmi lo stesso errore...?
Finche' non provi non lo saprai mai !
L'idea e' creare UN SOLO .res da due .rc, quindi il link non da
errore, a meno che le due risorse vadano in conflitto, ad esempio
se hanno una definizione di accelerator ciascuna, ma questo e' un
errore di compilazione.