Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Определение способа подачи бумаги

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
В реестре написано:

Цитата:
Автоматическое устройств  
Ручное устройство подачи  

Не знаю где ещё в драйверах это записано, но там есть файл типа INF где русским по белому записано ПОЛНОСТЬЮ. Из-за этого я и затеял всё это...
 
ALL
Требуется помощь в проведении научного эксперимента
Кто пользуется D2009 или D2010 прошу откомпилировать вот это:
_http://ifolder.ru/15401783
двумя способами:
1. просто откомпилировать (если получится не внося изменений в код);
2. указать IDE, что ВСЕ данные должны получаться и выдаваться в ЮНИКОДЕ.
Экзешники выложите или пришлите мне.
О смысле эксперимента и о его результатах сообщу после его проведения.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 03:10 14-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N

Цитата:
е знаю где ещё в драйверах это записано, но там есть файл типа INF где русским по белому записано ПОЛНОСТЬЮ. Из-за этого я и затеял всё это...

Я в своих дровах в файле типа INF не нашел ввобще никакого упоминания об типе подачи ни по русски ни по ангельски (Canon 2900)
 

Цитата:
научный эксперимент

Дык изначально, ежели ПРОСТО откомпилировать в Дельфи 2009/2010, то все в юникоде компилируется - там же кругом Char и массивы Char-ов, а они как раз и юникодовые! А также юзаются юникодовые версии ф-ций по умолчанию. Так что если хочешь получить И анси-версию - выкладывай соотв. анси-версию проекта...

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 03:53 14-12-2009 | Исправлено: psa1974, 03:57 14-12-2009
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
Это был файл P3210.DDF:
Подробнее...
А где это ещё прописано - неизвестно...

Цитата:
Так что если хочешь получить И анси-версию - выкладывай соотв. анси-версию проекта...  

Вот я и хочу получить обычную версию и версию в юникоде. Сам я, к сожалению, не знаю как правильно всё это перевести. Вот и прошу помощи в компиляции.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:41 14-12-2009 | Исправлено: Aleksandr N, 12:44 14-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N

Цитата:
Вот я и хочу получить обычную версию и версию в юникоде. Сам я, к сожалению, не знаю как правильно всё это перевести.

Используя ВСЛ (а именно ты используешь класс TPrinter), невозможно сделать в юникодовой дельфи проект, полностью манипулирующий только анси-строками. Можно сделать так, чтобы то, что получалось при использовании TPrinter конвертировалось в ансистроку, а потом вызывались анси-версии апишных ф-ций. Затем для отображения в интерфейсе эти строки снова должны быть преобразованы в юникод. Смысл? Чисто ансиверсию в юникодовой Дельфи можно только на API написать...
 
Добавлено:
Вот, смотри (именно так и сделал - конвертируя-переконвертируя строки): Ссылка (внутри 2 проекта, с экзешниками)...

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 13:58 14-12-2009
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
Пока всё эдентично как и на D7 (Win7). Завтра ещё проверю на WinXP.
 
Только не пинайте сильно
Я мало смыслю в отладке, но в этом проекте на ХР при закрытии ошибка возникает в этом месте:

Может это кому-то что-то скажет.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 18:59 14-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
проверил на работе: Вин ХР, принтер HP LaserJet P2015 Series PCL 6
Выдало:
Aвтoвыбop
Aвтoвыбoр принтeрa
Pучнaя пoдaчa, лoтoк 1
Лoтoк 1
Лoтoк 2
Лoтoк 3
 
Никаких зависонов. Уж не знаю, что у тебя там творится... Я иссяк, тем более что мой совет насчет реестра остается в силе, если конечно целью является не написание программы,использющей эти значения, а просто изыскания на тему проблемы кривых дров и ответа на вопрос почему делается эксцепшен...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 19:53 14-12-2009
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
Ну если очень интересно попробуй этот драйвер:

Добавил сам драйвер:
Ссылка

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 20:02 14-12-2009 | Исправлено: Aleksandr N, 20:11 14-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
Поставил на виртуалку этот драйвер. Действительно пишет

Цитата:
Автоматическое устройств  
Ручное устройство подачи

Но никаких эсцершенов, программа совершенно нормально завершается! Аж обидно
 
ЗЫ: А драйвер хитрый - сам про свой косяк знает и выдает сокращенно - автоподача и ручная подача (это не винда выводит, а сам софтина конфигурации драйвера от производителя драйвера - она "в уме" сокращает - сто пудов.)
 
Добавлено:
кстати, если посмотреть P32102.DDF, то можно заметить:

Цитата:
DefaultSource
*DefaultSource:GPCOMBO, COMBO-BOX
*DefaultSource: "Автоматическое устройство подачи",            7;
*DefaultSource: "Ручное устройство подачи",            4;
 
SecoundSource
*SecoundSource:GPCOMBO, COMBO-BOX
*SecoundSource: "Автоподача",            7;
*SecoundSource: "Ручная подача",    

Вот и ответ - софтина конфигурации драйвера берет вторые наимменования. Откуда берет, если не считать этого файла (а он у нее есть - C:\WINDOWS\system32\spool\drivers\w32x86\P32102.DDF) - не знаю.

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 21:29 14-12-2009
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
В том-то и дело что берутся значения

Цитата:
DefaultSource

и сокращаются. Ладно, завтра проверю твои экзешники - там посмотрим.
Ради интереса проверь этот экзешник, который у меня точно выдаёт ошибку на ХР.
Project1.rar
 
Добавлено:
Представляешь какое западло!!!
(пардон за выражение)
Сейчас запустил свой экзешник на D7 на виртуалке - выдаёт ошибку!!!
Запустил оба твои экзешники - ТИШИНА!!!
 
Какие мысли???
В каких системных модулях может быть принципиальная разница???
 
Такие программы как Компас были выпущены гораздо раньше D2009. Значит производители это как-то обошли (у них не спросишь). И это явно ошибка IDE, а не драйвера или ОС (про кривость двух последних промолчу).
 
P.S. На D2009 переходить не предлагать - по техническим причинам выше D2007 подняться не могу.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 23:50 14-12-2009 | Исправлено: Aleksandr N, 00:38 15-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
Наверное ты будешь ругаться матом... но у меня на вирутальной вин ХР (уже дома) ни мой экзешник, ни твой НЕ ВЫДАЮТ ОШИБОК! Оба совершенно одинаково себя ведут. Один в один. Все гладенько! Стало быть, это не ошибка IDE.
Используемые внешние библиотеки
версия winspool.drv (вин ХР SP3) - 5.1.2600.5512, md5: 78bee0c15b135228e13f021c238556e5
 
Но я сомневаюсь, что дело в какой-либо из этих библиотек - экзешники их с собой не тягают и если ошибка в одной софтине бы по их вине возникала, она бы возникала и в другой совершенно также. Значит, дело и не в библиотеках, получаецца.
Шаманство какое-то у тебя. Надо карму почистить...

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 00:44 15-12-2009 | Исправлено: psa1974, 01:13 15-12-2009
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Свои пять копеек вставлю, не в тему - но насчет странного поведения одной софтины на разных машинах. Давеча делал цветное мемо (топик был тут такой). Так вот на моей машине глюков с отрисовкой не было, у других были. И я долго не мог понять, где что не работает, пока дома не запустил
Насчет ексепшенов - может кто то какой нить дебаггер прописал и скомпилировал с опциями типа в случае ошибки дебажить, а у другого все отключено?

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:34 15-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Мои экзешники, которые я по просьбе Aleksandr N сделал в Дельфи 2010 (юникодовая и полуконь-полурябчик ) собраны именно с отладочной информацией - я ее вообще никогда не отключаю. Но как раз почему-то мои экзешники у него ведут себя хорошо. Хз...
 
Aleksandr N
Вот собрал экзешники с активированным EurekaLog... может они помогут пролить свет...
чисто юникодовый экзешник в Дельфи 2010
экзешник в Дельфи 7 (с и без EurekaLog)
 
Добавлено:
Докладаю (подбираемся ближе):
а). Винда реальная ХР СП3, установлен принтер Кенон 2900:
все варианты работают без глюков.
 
б). Винда виртуальная ХР СП3, установлен ксерокс-фазерный принтер:
"чисто юникодовый экзешник в Дельфи 2010" работает чисто!
мой экзешник, собранный в  Дельфи 7 глючит (оба моих варианта - (с и без EurekaLog)). Но результат выдает.
Причем EurekaLog торжественно заявляет что эксцепшен возникает на 82 строке - а это FreeMem(pBinNames);
 
В задаче спрашивается - что это за "оно"?
 
Добавлено:
Еще докладаю:
В режиме трассировки вываливает на окно "ЦПУ" и в Дельфи 7 и в Дельфи 2010 (при этом если эксешник, сделанный в Дельфи 2010 запустить не из под среды, ошибка по прежнему не "озвучивается"!!!, как Дельфи 2010 умеет это делать - не знаю) на строке:  
WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(pBinNames), nil);
 
Заключение:  
ф-ция DeviceCapabilities при получения буфера согласно флагу DC_BINNAMES заточена на 24 символа (как и озвучено в документации) и когда там, откуда она читает буфер, реально содержится больше символов, она выпадает на "тю, вы шо с дуба упали?!" При этом свои 24 символа на строку она считывает.  
 
Итак - "кривые фазерно-ксероксные дрова, как они есть". Выход - обернуть вызов DeviceCapabilities в thy..exception и в обработчике эксцепшена проверить, а может всет-таки значение уделось получить (в нашем случае несмотря на эксцепшен значение таки считываются!) и если значения не получены, выполнять чтение реестра как резервный вариант получения значений.
На этом моя "точка". Дальше копать нечего. Ну или без меня  
 
ЗЫ: ShIvADeSt оказался прав - надо было "дома запустить" и все увидеть собственноручно.

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 04:05 15-12-2009 | Исправлено: psa1974, 05:47 15-12-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974

Цитата:
эксцепшен возникает на 82 строке - а это FreeMem(pBinNames);  

1.если это мой код взятый с айфолдера, то имеет смысл проверить - была ли выделна память на pBinNames
2. GetMem(pBinNames, (numBinNames+1) * SizeOf(TBinname));
выделим чуть чуть побольше памяти и зачистим ее
ZeroMemory(pBinNames, (numBinNames+1) * SizeOf(TBinname));
и изменить это
Код:
 sl.addObject(Copy(pBinNames^[i],1,24), TObject(temp));

т.е. строго ограничить строку.
3. после строчки pBins := nil;
также обнулить pBinNames :=nil;
версия/контр.сумма winspool.drv - совпадает
зы: ошибок на 6 принтерах, правда сетевых, не обнаружено на исходниках айфолдера.
зы2: D7, XP офицал+ последние обновления
зы3:
Цитата:
Выход - обернуть вызов DeviceCapabilities .......
поддерживаю
 
Добавлено:
Aleksandr N
урезал все

Код:
 
 var
   ss1 : string;
   Buffer: PChar;
   ss2 : array [0..25] of Char;
 begin
   Printer.PrinterIndex := -1;
   Printer.GetPrinter(Device, Driver, Port, hDevmode);
   parName := Printer.Printers[Printer.PrinterIndex];
   numBinNames := WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, nil, nil);
   if numBinNames > 0 then
   begin
     GetMem(Buffer, (numBinNames) * 24);
     try
       WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(Buffer), nil);
       for i := 1 to numBinNames do begin
         ZeroMemory(@ss2, SizeOf(ss2));
         StrLCopy(ss2,PChar(Buffer+(i-1)*24), 24);
         ss1 := ss1+ ss2+#13#10;
       end;
       ShowMessage(ss1);
     finally
       FreeMem(Buffer);
     end;
   end;
 end;
 

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 09:17 15-12-2009 | Исправлено: greenpc, 11:08 15-12-2009
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
Оба твои экзешника идут без ошибок!!!
А карма чистая - два месяца назад переставил.
Немного истории. Стояла ХР SP1 обычная, после чистки кармы стала SP3 Corp.. На виртуалку ставил SP3 Corp.. В моём распоряжении конечно есть ещё 25 машин, могу ещё на них попробывать в качестве эксперимента. Но я уверен что это IDE, раз твои идут а не библиотеки. Вот только в каком месте?!?

Цитата:
thy..exception  

Пробывал, ошибок не выдаёт, но программу страшно после этого глючит вплоть до того что компонент не находит родителя и т.д.
Остальное попозже повнимательней почитаю.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 11:59 15-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenpc
Я не знаю откуда был взят этот код, но похоже что он твой, на всякий случай вот код
1. Память была выделена.
2. Пробовал выделять больше - не помогает.
Вот это:  

Код:
sl.addObject(Copy(pBinNames^[i],1,24), TObject(temp));

здесь не причем - ошибка возникает гораздо раньше и именно в момент вызова DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(pBinNames), nil); и поскольку вываливает в окно ЦПУ, думаю, что это внутренняя необработанная ошибка в конкретно этой АПИ-шной ф-ции. Т.е. если эту строку sl.addObject(...) вообще убрать, ничего не изменится.
3. Ошибка лично у меня возникает только с фазером, у которого длина значения переваливает за 24 символа. С Кеноном, Хулипакардом и массой других принтеров все пучком.
 
ЗЫ: мне вот другое стало интересно:
в Дельфи 7 для фазера-ксерокса ошибка вываливает что в режиме трассировки (отладки) что при запуске отдельно экзешника, созданного в Дельфи 7.
В Дельфи 2010 ошибка вываливает только в режиме трассировки (отладки). Когда я запускаю этот экзешник не из под ИДЕ, никаких ошибок и эксцепшенов. Каким макаром оно подавляется?
 
Добавлено:
greenpc
проверил урезанный вариант... - "те же яйца, вид сбоку"... Т.е. в ЦПУ выкидывает на этой же строке  

Код:
DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(Buffer), nil);  

Как говорится, не срослось у АПИ с драйверами от ксерокса. Тупо внутри ф-ции DeviceCapabilities происходит экцепшен (причем детали его происхождения нам не ведомы, можно только гадать, ибо мы не знаем как именно ф-ция реализована) и не обрабатывается и выпускается наружу. К чему это приводит - мы это уже читали.
 
Добавлено:
Aleksandr N

Цитата:
Оба твои экзешника идут без ошибок!!!

Это те, которые с включенным EurekaLog? И сделанный под Дельфи 7? Если да, тогда я вообще ничего не понимаю, потому что у меня сделанный под Дельфи 7 экзешник с фазероскими дровами выкидывается в осадок.

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 12:42 15-12-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Т.е. в ЦПУ выкидывает на этой же строке  
 

Код:
DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(Buffer), nil);

Так я и предлагал не использовать вызов этой функции.
Вряд ли есть принтеры с какими-то уникальными способами подачи бумаги.

----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 13:12 15-12-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
psa1974
сделал так

Код:
       try
       WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(Buffer), nil);
       except
         on e: Exception do ShowMessage(IntToStr(getlasterror)+ e.Message);
       end;
 
на исключение не попадаю. при запуске в иде уходит в дебаг. ошибка в ntdll. но в результате при любом запуске получаю все значания( 2 шт.). испытал на хероксе 3210. драйвера брал выше. таким образом в данном случае except можно оставить пустым.

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 13:29 15-12-2009 | Исправлено: greenpc, 13:37 15-12-2009
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man
Я совершено согласен, что использовать ее не стоит, здесь были предоставлены способы обхода проблемы (использование констант и использование реестра).
И вообще тема, на мой взгяд давно исчерпана - еще на первой странице. Ибо в чистом виде косяк драйверов, не предусмотренный в АПИ.
 
Добавлено:
greenpc
сделал так, не помогает - не знаю, что поменялось - видимо погода в районе африканского континента, но теперь в бесконечном цикле вываливает в окно ЦПУ. Без ИДЕ экзешник тупо схлопывается - исчезает как процесс без каких либо слов. Короче. Либо использовать корректные дрова либо не использовать DeviceCapabilities.

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 13:33 15-12-2009 | Исправлено: psa1974, 13:48 15-12-2009
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал такую версию GetPaperBins, попробуйте.
Названия на русский не стал переводить

----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 13:59 15-12-2009 | Исправлено: data man, 14:00 15-12-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
data man а если

Цитата:
7 Автовыбор лотка
1 Лоток 1
3 Лоток 2
2 Лоток 3
256 Лоток 4
4 Обходной лоток

Aleksandr N
возьмите свежие драйвера с оффсайта
Цитата:
Filename: WC3210_Drivers_Utils.zip  
Version: 6-16-09  
Date: 6/16/2009  
 

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:10 15-12-2009 | Исправлено: greenpc, 14:50 15-12-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Определение способа подачи бумаги


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru