Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите разобраться с DEVMODE
|
|||
|---|---|---|---|
|
#18+
В Windows 98 я вызвал функцию EnumPrinters: EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 2, prnInfo, cByte, &cByte, &cStruct) То есть в prninfo должен вернуться массив структур PRINTER_INFO_2 для всех принтеров (у меня вернуло 3 принтера, все сетевые и на машинах, к которым они подключены, стоит тоже Windows 98) У структуры PRINTER_INFO_2 есть поле PDEVMODE pDevMode. Меня озадачили поля pDevMode->dmPenningWidth, pDevMode->dmPenningHeight. В документации по их поводу написано Windows NT/2000/XP: This member must be zero. Windows 95/98/Me: THIS MEMBER IS NOT SUPPORTED. Я так понял, что под Win98 их можно вообще игнорировать. Но у меня значение этого поля для всех трех структур после вызова EnumPrinters совершенно разное. Более того у структуры, которая соответствует моему принтеру по умолчанию (HP LaserJet 1200 Series PCL 6) поле pDevMode->dmFields =0x803F03, то есть установлен бит DM_PANNINGWIDTH Посему вопрос: какую смысловую нагрузку несут поля dmPenningWidth и dmPenningHeight и на что влияет поле dmFields. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 11:33 |
|
||
|
Помогите разобраться с DEVMODE
|
|||
|---|---|---|---|
|
#18+
BlessНо у меня значение этого поля для всех трех структур после вызова EnumPrinters совершенно разное. Их НУЖНО игнорировать. Сходи в инклуд и посмотри как эта структура (DEVMODE) объявлена. Там увидишь, в самом конце: Код: plaintext 1. 2. 3. BlessПосему вопрос: какую смысловую нагрузку несут поля dmPenningWidth и dmPenningHeight и на что влияет поле dmFields. dmFields говорорит пользовательской программе какие поля общей универсальной структуры были проинициализированы вот этим конкретным драйвером. Драйвер же чаще всего и выделяет память под структуру. То есть если драйвер принтера расчитан на работу в NT+ то он вполне может проинициализировать эти два поля вполне правдивыми значениями. Если же драйвер принтера расчитан на 9x то ... А вот для чего эти поля предназначены я не очень представляю. "must be zero" значит оно нам не нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 19:16 |
|
||
|
Помогите разобраться с DEVMODE
|
|||
|---|---|---|---|
|
#18+
White Owl dmFields говорорит пользовательской программе какие поля общей универсальной структуры были проинициализированы вот этим конкретным драйвером. Но о чем это говорит? О том, что все остальные поля этому конкретному драйверу не нужны? Или о том, что их инициализация оставляется на откуп программисту? White Owl То есть теоретически, обращаясь на 9x к этим полям ты рискуешь получить GPF по причине запроса в чужую память. Почему тогда драйвер принтера HP LaserJet 1200 Series PCL 6 под Windows 98 установил бит DM_PANNINGWIDTH структуры dmFields White Owl Код: plaintext 1. 2. 3. 4. Эээ. А какой винде соответствует (WINVER == 0x0500)? Вообще-то этот вопрос возник вот почему: После того как я получил список из трех структур PRINTER_INFO_2, я подменил у структуры, соответствующей принтеру Kyocera FS-1000, поле pDevMode на поле pDevMode структуры, соответствующей принтеру HP LaserJet 1200 Series PCL 6. Последующий вызов функции DeviceCapabilities(Info.pPrinterName, Info.pPortName, DC_PAPERS, paper_types, Info.pDevMode), (где Info - это PRINTER_INFO_2 Kyocera-ы с подмененной Info.pDevMode) привел к большому белому окну со словами "Ошибка в программе. Для продолжения нажмите кнопу "Пропустить" и сохраните даные в новом файле. Для выхода из программы нажмите кнопку "закрыть", при этом все изменения будут потеряны". А после этого "Ваша программа выполнила недопустимую операцию... обратитесь к разработчику". Причем, если проделать все то же самое, только оставив старым, родным для Kyocera-ы, поле Info.pDevMode->dmPanningHeight, то ошибки нет! Причем установка/снятие бита DM_PANNINGHEIGHT в dmFields никак на эту ошибку не влияет. Вот я и ломаю голову, как это поле, которое в Win 98 вроде как игнорируется, так круто влияет на поведение программы. Причем такая ошибка наблюдается только в случае, если HP LaserJet 1200 Series PCL 6 - принтер по умолчанию. Если поставить таковым любой другой принтер из трех, доступных мне, то вышеописанные манипуляции к ошибке не приводят. PS Такие эксперименты мне в голову пришли не от скуки. Просто такое белое окошко стало выскакивать в моей программе на Делфи, когда в предварительном просмотре (компонент отчетов FastReport) меняешь принтер с HP LaserJet 1200 Series PCL 6 на Kyocera FS-1000. Глянул исходники FastReport-а, и нашел это самое место, вот теперь ломаю голову. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 09:29 |
|
||
|
Помогите разобраться с DEVMODE
|
|||
|---|---|---|---|
|
#18+
Bless White Owl dmFields говорит пользовательской программе какие поля общей универсальной структуры были проинициализированы вот этим конкретным драйвером. Но о чем это говорит? О том, что все остальные поля этому конкретному драйверу не нужны? Или о том, что их инициализация оставляется на откуп программисту? Не проиницилизированные драйвером поля обычно не играют для драйвера никакой роли. Либо ошибка в драйвере :) BlessПочему тогда драйвер принтера HP LaserJet 1200 Series PCL 6 под Windows 98 установил бит DM_PANNINGWIDTH структуры dmFields Скорее всего, потому что этот драйвер писался изначально с учетом NT а потом уже подгонялся под 98. BlessВот я и ломаю голову, как это поле, которое в Win 98 вроде как игнорируется, так круто влияет на поведение программы. Ну как я и предупреждал - в одном случае под эти поля память выделяется, в других нет. Ну а тот кто про поля не знает, тот не знает и что делать с соотвествующим битом в dwFlags и игнорирует его. BlessПричем такая ошибка наблюдается только в случае, если HP LaserJet 1200 Series PCL 6 - принтер по умолчанию. Если поставить таковым любой другой принтер из трех, доступных мне, то вышеописанные манипуляции к ошибке не приводят. Скорее всего бага именно в драйвере этого HP LJ. Если он принтер по умолчанию, то он может использовать короткий вариант структуры, а если принтер не установлен основным - то длинный. Тебе ж никто не гарантирует что в обоих случаях (по умолчанию или нет) драйвер будет использовать один и тот же код для описания принтера :) BlessPS Такие эксперименты мне в голову пришли не от скуки. Просто такое белое окошко стало выскакивать в моей программе на Делфи, когда в предварительном просмотре (компонент отчетов FastReport) меняешь принтер с HP LaserJet 1200 Series PCL 6 на Kyocera FS-1000. Глянул исходники FastReport-а, и нашел это самое место, вот теперь ломаю голову. :( Они меняют данные в этих полях? Ну тогда проще всего написать им. FastReport'овцы даже на этом форуме появляются иногда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2005, 20:37 |
|
||
|
Помогите разобраться с DEVMODE
|
|||
|---|---|---|---|
|
#18+
White Owl Они меняют данные в этих полях? Ну тогда проще всего написать им. FastReport'овцы даже на этом форуме появляются иногда :) Да нет, они как раз не меняют, в том-то все и дело. После выбора принтера(событие OnClick для ListBox-а со списком принтеров в форме-диалоге выбора принтера) меняются device name и driver name на новые значения, а вот DevMode остается от старого принтера. Все становится ОК, если раскомментировать закомментированную по умолчанию строчку //{$DEFINE PRN_RESET} в модуле FR_Prntr.pas о которой я только 3 часа назад вспомнил :) В общем, проблемы больше нет. Но можно сказать, что она возникала не зря. :)Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 13:20 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33026418&tid=1347741]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 365ms |

| 0 / 0 |
