Newsgroup: it.comp.lang.delphi
Titolo: Bug nella unit WINDOWS.PAS

Salve a tutti, ho trovato un bug nella unit WINDOWS.PAS. Di seguito riporto
la dichiarazione delle funzioni incriminate:
function BroadcastSystemMessageA; external user32 name
'BroadcastSystemMessageA';
function BroadcastSystemMessageW; external user32 name
'BroadcastSystemMessageA';
function BroadcastSystemMessage; external user32 name
'BroadcastSystemMessageA';
Come potete notare tutte e tre referenziano la funzione esterna
"BroadcastSystemMessageA", ma c'e' un piccolo particolare: su Windows95 tale
funzione NON ESISTE, quindi tutti i programmi che la utilizzano si bloccano.
Nella libreria USER32.DLL di Win95 c'e' la funzione
"BroadcastSystemMessage", mentre in quella di Win98 ci sono le esportazioni
"BroadcastSystemMessage", "BroadcastSystemMessageW" e
"BroadcastSystemMessageA". La dichiarazione corretta da scrivere nella
WINDOWS.PAS sarebbe quindi
function BroadcastSystemMessageA; external user32 name
'BroadcastSystemMessageA';
function BroadcastSystemMessageW; external user32 name
'BroadcastSystemMessageW';
function BroadcastSystemMessage; external user32 name
'BroadcastSystemMessage';
L'ho modificata e l'ho inclusa in un progetto, ed effettivamente funziona.
La mia domanda e': come faccio adesso a sostituire quella sbagliata? Ho
cancellato la WINDOWS.DCU, ma non mi ricompila la .PAS. Inoltre, anche se
cancello la WINDOWS.DCU, tutti i programmi che la usano vengono compilati
normalmente: dove viene cercata 'sta libreria?
Ciao e grazie in anticipo per i suggerimenti
Daigo

UEILA',
    Allora, devi ricompilare i package di Borland che trovi in <Delphi>\lib
e fare il build del tuo progetto. Cosě dovrebbe ricreare i dcu.
Auguri !

 la dichiarazione delle funzioni incriminate:
Ciao, che versione di Delphi ? Hai notificato la cosa a mamma Inprise?
Ciao, Davide DG

 Ciao, che versione di Delphi ? Hai notificato la cosa a mamma Inprise?
Delphi 5.01 Enterprise. Non ho notificato la cosa alla Inprise perche'
purtroppo non ho tempo di cercare l'indirizzo a cui mandare l'errore...
Comunque ho risolto ricompilando la WINDOWS.PAS e rimettendola nella
cartella LIB
Ciao e grazie per gli aiuti.
Daigo

 ha scritto nel messaggio
news:8smq8p$s3a$1...@fe1.cs.interbusiness.it...

Pero' di package non ce ne sono... Non ricompilabili, almeno... Ho risolto
mettendo la unit WINDOWS.PAS nella cartella Lib. L'ho ricompilata e poi ho
tolto il .PAS (per evitare di ricompilarla tutte le volte). Adesso funziona
=)
Grazie comunque
Daigo

funzione NON ESISTE, quindi tutti i programmi che la utilizzano si bloccano.
E' un problema conosciuto...
Tratto da MSDN :
BUG: BroadcastSystemMessageA Not Found in User32.dll on Win 95
Last reviewed: December 30, 1998
Article ID: Q182809 
--------------------------------------------------------------------------------
The information in this article applies to: 
Microsoft Win32 Software Development Kit (SDK) on the following
platform: 
    - Microsoft Windows 95
SYMPTOMS
When an application running under Windows 95 calls
BroadcastSystemMessage, the application fails with the following
error: 
   BroadcastSystemMessageA not found in User32.dll.
CAUSE
The WINUSER.H header file contains the following code: 
   #ifdef UNICODE
   #define BroadcastSystemMessage  BroadcastSystemMessageW
   #else
   #define BroadcastSystemMessage  BroadcastSystemMessageA
   #endif
The error occurs under Windows 95 because BroadcastSystemMessageA is
not exported by USER32.DLL. The same code works as expected under
Windows 98 and Windows NT since both BroadcastSystemMessage and
BroadcastSystemMessageA are exported by USER32.DLL. 
RESOLUTION
Use the following code to call BroadcastSystemMessage instead of
BroadcastSystemMessageA: 
   #include <windows.h>
   #ifdef BroadcastSystemMessage
   #undef BroadcastSystemMessage
   #define BroadcastSystemMessage BroadcastSystemMessage
   #endif
STATUS
This problem is fixed in Windows 98 and Windows NT 4.0 and later by
exporting both BroadcastSystemMessage and BroadcastSystemMessageA from
USER32.DLL.