Manuel,
En la función PrinterDcFromName() llamamos a la función CreateDC() del API de Windows:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183490(v=vs.85).aspxEn la documentación del primer parámetro que recibe CreateDC() comentan:
lpszDriver
A pointer to a null-terminated character string that specifies either DISPLAY or the name of a specific display device. For printing, we recommend that you pass NULL to lpszDriver because GDI ignores lpszDriver for printer devices.
Es decir, tenemos que proporcionarle NULL. En el código actual de FWH tenemos:
- Code: Select all Expand view
HB_FUNC( PRINTERDCFROMNAME ) // ( cDriver, cModel, cPort )
{
LPDEVMODE lpDevMode;
lpDevMode = (LPDEVMODE) GlobalLock( pd.hDevMode );
hb_retnl( ( LONG ) CreateDC( ( LPSTR ) hb_parc( 1 ),
( LPSTR ) hb_parc( 2 ),
( LPSTR ) hb_parc( 3 ),
lpDevMode ) );
GlobalUnlock( pd.hDevMode );
}
Habría que comprobar si hb_parc( 1 ) de un valor nil devuelve una cadena vacia ó NULL.
Lo que comentas de que el segundo parámetro cModel cambia, eso parece imposible (a primera vista) pues desde esa función no se modifica el valor de esa variable.