Newsgroup: it.comp.programmare.win32
Titolo: Un'errore del Petzold?

Non vorrei accusare nessuno ma io ho copiato pari pari questo codice
dal cd allegato a "programmare windows  quinta edizione"
dell'autorevole C. Petzold e nel compilare mi da errore.
Ecco il codice e poi l'errore:
*-------------------------------------
   GETPRNDC.C -- GetPrinterDC function
  -------------------------------------*/
#include <windows.h>
HDC GetPrinterDC (void)
{
     DWORD            dwNeeded, dwReturned ;
     HDC              hdc ;
     PRINTER_INFO_4 * pinfo4 ;
     PRINTER_INFO_5 * pinfo5 ; 
     if (GetVersion () & 0x80000000)         // Windows 98
     {
          EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, NULL,
                        0, &dwNeeded, &dwReturned) ;
          pinfo5 = malloc (dwNeeded) ; //<------ QUI MI DA ERRORE
          EnumPrinters (PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE) pinfo5,
                        dwNeeded, &dwNeeded, &dwReturned) ;
          hdc = CreateDC (NULL, pinfo5->pPrinterName, NULL, NULL) ;
          free (pinfo5) ;
     }
     else                                    // Windows NT
     {
          EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, NULL,
                        0, &dwNeeded, &dwReturned) ;
          pinfo4 = malloc (dwNeeded) ; //<------- QUI MI DA ERRORE
          EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pinfo4,
                        dwNeeded, &dwNeeded, &dwReturned) ;
          hdc = CreateDC (NULL, pinfo4->pPrinterName, NULL, NULL) ;
          free (pinfo4) ;
     }
     return hdc ;   
}
Nel codice ho segnato le parti che creano errore nel compilatore.
Questo frammento di codice si trova nel file "GetPrnDC.c"
che fa parte del programma "print1.c" nel capitolo 13 relativo alla
stampa di testo e grafica.
Perchč non funziona?
grazie
ps: premetto che questo frammento l'ho copiato pari pari dal file nel
cd-rom senza modificarlo !!
pps: ecco l'output del compilatore in riuardo all'errore:
...\getprndc.c(19) : error C2440: '=' : cannot convert from 'void *'
to 'struct _PRINTER_INFO_5A *'
        Conversion from 'void*' to pointer to non-'void' requires an
explicit cast
...\getprndc.c(33) : error C2440: '=' : cannot convert from 'void *'
to 'struct _PRINTER_INFO_4A *'
        Conversion from 'void*' to pointer to non-'void' requires an
explicit cast
Error executing cl.exe.
editcontrolo.exe - 2 error(s), 0 warning(s)
messaggio di: credici [
cre...@infinito.it
]

>           pinfo5 = malloc (dwNeeded) ; //<------ QUI MI DA ERRORE
prova con
pinfo5=(PRINTER_INFO_5 * )malloc(dwNeeded)

 explicit cast
Probabilmente hai attivato le estensioni C++ anche per i sorgenti in C,
quindi il compilatore fa un controllo "rigoroso" dei cast anche per i file
con estensione .C. Risolvere la cosa e` piuttosto semplice, basta aggiungere
nel codice i cast che fanno lamentare il compilatore. Quello segnalato
nell'errore sopra ad esempio diventa:
pinfo5 = (PRINTER_INFO_5*)malloc(dwNeeded);
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/

In data Tue, 21 Aug 2001 17:58:33 GMT, credici ha letto su
it.comp.programmare.win32 il messaggio di "Lorenzo Lutti"
<lorenz...@DOHtiscalinet.it>:
grazie, era tutto lě il problema!!
messaggio di: credici [
cre...@infinito.it
]