Newsgroup: it.comp.lang.c++
Titolo: Problema con timeSetEvent

Ciao, 
volevo utilizzare il timer multimediale in una mia applicazione e ho
trovato le funzione suddetta nell'help del VC6.0.
Ho compilato il tutto ma non rieco a linkare perche il linker non trova
la definizione della funzione.
Ho cercato un po' ma non sono riuscito a trovare nessun modo per
risolvere il problema.
C'e' nessuno che sa darmi una mano?
Grazie per l'interessamento.
P.S. Vorrei linkare le funzioni multimediali in modo statico se
possibile.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |

possibile.
Per cercare di garantire che il programma crashi in modo
orrendo su sistemi diversi dal tuo, usando la _tua_ versione
della winmm.dll, invece di quella adatta al sistema operativo,
ed eventualmente all'hardware, su cui si trova...?  Hmmm --
mica facile, ma, con un po' di cattiveria e di ingegno, un
qualche trucco si puo` anche trovare!  Sostanzialmente,
bisogna incapsulare due moduli in formato Portable Executable
(la tua EXE, e la winmm.dll del tuo sistema operativo) entro
uno solo; il formato dei PE e` ben documentato, e la libreria
"image help" ti da` anche una mano a identificare, e taroccare,
i vari 'dizionari' e 'sezioni' che li compongono.
Sara` una fatica, ma vuoi mettere, poi, che bello scherzo
per tutti quelli che pensano di poter fare girare il tuo codice
su computer un po' diversi dal tuo...!-)
Alex

Le definizioni delle funzioni multimediali si trovano nel file winmm.dll,
quindi dovresti  includere nella riga di comando del linker un riferimento
al file winmm.lib ottenendo cosě un link statico. Puoi farlo dal dialogo
Settings (scheda Link), oppure direttamente nel sorgente, includendo la
seguente riga:
#pragma comment(lib, "winmm")
Stefano.

 ed eventualmente all'hardware, su cui si trova...? 
Il programma andra' su un sistema dedicato quindi basta che funzioni
sulla macchina target, la richiesta era in relazione alla ricerca di
prestazione in termini di velocita' e leggerezza del codice, e pensavo
che questo fosse in linea con questa esigenza.
Ciao.


che questo fosse in linea con questa esigenza.
In termini di velocita`, l'impatto di usare una DLL invece di
chiamare funzioni linkate staticamente e` minimale, dell'ordine
di una istruzione di macchina per chiamata -- puoi ottimizzare
le cose usando opportunamente, in fase di rilascio/istallazione,
gli strumenti REBASE e BIND (fanno parte del Platform SDK, ma
comunque, mi pare, sono anche acclusi con Visual C++).  Le
operazioni di tipo timer, comunque, devono essere in grado di
tollerare variazioni ben maggiori dei 10nS (su di una CPU lenta)
di cui si tratta in questo caso.
E`vero che WINMM.DLL occupa 64k byte di disco (della memoria
fisica non hai da preoccuparti -- dovrebbero essere solo un paio
di pagine di working set, circa 8k), ma, sei _veramente_ a livello
di dover ottimizzare le cose sino a questo punto...?
Se lo spazio disco e` cosi` disperatamente stretto, ti suggerisco di
consultare (sull'MSDN, se occorre -- almeno la versione che e` con
Visual Studio 6 li ha tutti in linea) i vari articoli di Matt Pietrek
sul Microsoft System Journal degli ultimi 3-4 anni (nella rubrica
"Under the Hood", ma non solo su quella) -- sono pieni zeppi di
suggerimenti e strumenti davvero preziosi su come spingere
al massimo la "magrezza" dei propri eseguibili; scommetto che
un 80-100kbyte arrivi a risparmiarli anche se credevi di avere
gia` "spinto l'ottimizzazione a tavoletta" (la sua versione "di
minima" delle run-time del C, ad esempio, potrebbe anche
risparmiarti di avere sul sistema i _249K_ di MSVCRT.DLL,
sempre, naturalmente, che tu possa fare a meno dello shell
e di tutti gli altri normali eseguibili di sistema che la usano --
ma cio` si applica anche a WINMM.DLL, naturalmente, che
e` similmente un "mattone di basso livello" assai popolare).
Alex