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).aspx
En 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:
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.