Re Кто pаботал с Windows Embedded?

Dec 16, 2004 Last reply: 21 years ago 900 Replies

"Andrew V. Miheev" snipped-for-privacy@lsid.ru сообщил/сообщила в новостях следующее: news: snipped-for-privacy@mi.lsid.ru...

Я фигею с этого зоопарка! Секретарю-девочке с полным отсутствием необходимых skills дается admin credentials (по телефону, sic!), она их предъявляет, входит в сеть и добавляет компьютер в AD! Блин, мне бы такое просто не приснилось бы даже! Ты, слышь, идею в голливуд продай - классный блокбастер из этого может вырасти.

Объясняю. Вопрос был про ночевку на рабочем месте и присоединение сервера в домен. Сплю я ночью, я не кулхацкер, который в 8 еще на работе. Среди белого дня либо на работе сисадмин, либо я, либо кто-то из двоих может приехать быстро. Опять же о том, что надо добавить сервак в домен решается не за 5 минут по телефону, это аргументируется, просчитывается, открывается финансирование, набрасывается какой-никакой план работ. То есть не по-русски у нас это делается, не с кондачка.

Я бы для себя решил что в данном месте явные проблемы с управлением техникой. То есть оно (управление) попросту отсутствует.

Так-то понятно: кто-то как-то поставил виндузу (из того, что это можт сделать любой идиот не следует, что именно ему надо это поручать), кто попало включил ее в сеть, она кое-как работает, а потом слышен вопль: "гамно ваша виндуза".

Денис.

Hello, Andrew! You wrote to Georg Panehin on Mon, 17 Jan 2005 15:25:11 +0200:

AVM>>> Я уже не знаю, как еще объяснять... Я _не_ использую TTY.DLL AVM>>> напрямую. Она входит в состав _стандартного_ _драйвера_ AVM>>> _стандартного_ _принтера_ Майкрософта типа "Simple/Text only". Этот AVM>>> драйвер я использовал многократно на разных Виндовс-ОС с различными AVM>>> внешними устройствами, которым _не_ требовалась обработка данных AVM>>> протокола, а подключение могло быть LPT или COM. При переназначении AVM>>> в файл легко получаешь протокол передачи данных в порт для отладки. GP>> А может все эти штучки на 7-битный поток рассчитаны? А для полной GP>> поддержки всех 8 бит нужно пользоваться правильными средствами? GP>> Т.е. именно CreateFile? AVM> Хорошо. Давай по другому. Предположим, тебе из твоей программы надо AVM> что-то распечатать предоставив пользователю выбрать AVM> _предустановленный_ принтер со всеми вытекающими. Ты это тоже через AVM> CreateFile делаешь? Про OpenPrinter(), WritePrinter() и ClosePrinter() AVM> никогда не слышал?

Понял, понял. Конечно, с принтером нужно работать через его родной API. Тогда непонятно, почему, раз принтер подсоединен к COM-порту, обращение к нему идет через tty?... Темное это дело... Видать или программисты у авторов принтера виндоненавистники, или что-то с русским языком в этом драйвере не так. Кстати, а ты не забыл принтеру задать правильные установки для печати русского языка? Помню раньше были большие проблемы: то из-за OEM-шрифта, то из-за какой-нибудь кодовой страницы...

А вообще я в области самосмоятельного применения принтеров не силен :-) Посему прошу извинить, что встрял...

With best regards, Georg Panehin. E-mail: georg_panehin<собака>mail<точка>ru

Добрый день.

А сколько раз _тебе_ повторять - у меня на этот порт подключался _именно_ _принтер_. Или ты не читатель, а писатель?

С каких это пор? Или ты про "железный" TTY? Так нафига он мне нужен?

Хорошо. Давай по другому. Предположим, тебе из твоей программы надо что-то распечатать предоставив пользователю выбрать _предустановленный_ принтер со всеми вытекающими. Ты это тоже через CreateFile делаешь? Про OpenPrinter(), WritePrinter() и ClosePrinter() никогда не слышал?

Я тоже. Она где-то на пути между моей программой и портом, на который посажен принтер.

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

Принтерами как пользуешься? Или никогда не пользовался?

Hello Dima.

16 Jan 05 09:01, you wrote to Anton Abrosimov:

К сожалению, да. Hо теоретически - не должно.

Alexey

Здравствуйте.

AVM> А сколько раз _тебе_ повторять - у меня на этот порт подключался _именно_ AVM> _принтер_. Или ты не читатель, а писатель?

Пардон, у меня было впечатление, что все-таки не принтер.

Привет Dima!

Вcк Янв 16 2005 09:01, Dima Orlov -> Anton Abrosimov:

DO> Такая конструкция частенько порождает совершенно дикий код... Я не сталкивался. Hа AVR модификация бита 4 команды (для байтового поля 3 команды, то есть pазница невелика), пpовеpка бита 3 команды. Если битовое поле уже загpужено в pегистp, то его пpовеpка - 1 команда, это быстpее, чем если бы деpжать флаги байтами.

Hа этом все, пока. Anton Abrosimov. ... Внимание: идет подготовка к последнему запуску Windows 95

Hello, Alexey Boyko !

Теоретически оно конечно хорошо, но... Вобщем я пользуюсь &, | и масками... Писанины может быть чуть больше, но как-то результат более предсказуемый.

С уважением, Дима Орлов.

Привет Maxim!

Вcк Янв 16 2005 09:08, Maxim Polyanskiy -> Anton Abrosimov:

AA>> #define True 1 AA>> #define False 0 AA>> struct { AA>> u8 Task1: 1; AA>> u8 Task2: 1; AA>> } Flag = {False,False}; AA>> Flag.Task2 = True; AA>> if (Flag.Task1) ... MP> Вопрос во что это скомпилится потом. Switch/Case при последовательных MP> значениях в нормальной системе компилится в 3-5 нативных комманд и MP> таблицу. Выиграв в памяти в разы ты проиграешь во времени порядки. Я пpивел эту стpуктуpу только на твое утвеpждение, что в сях плохо pеализована pабота с битами. Так вот, switch pаботает с несколькими значениями одной пеpеменной, здесь же несколько пеpеменных. В таблицу набоp флагов никак не скомпилиpуется, вне зависимости, битовые они или байтовые. А скомпилиться пpовеpка этих флогов может, напpимеp, в подобную последовательность: lds r16,... sbrc r16,0 rcall ... sbrc r16,1 rcall ... ...

AA>> Тем не менее, это заметный недостаток. Полноценная вытесняющая AA>> многозадачность пpименима всегда. MP> Категорично ;) Hа скажем pic12 неприменима, а этот механизм применим. Логично, категоpичность убиpаем, всему своя ниша.

MP>>> Ацп там вооще в прерываниях. AA>> Там - возможно. А здесь дpайвеpом лишь выставляется флаг AA>> готовности MP> Так это на самом деле проблема которая решается только: 1) банальным MP> увеличением производительности системы Это экстенсивный путь, хотя почти всегда веpный. :)

MP> 2) грамотным проектированием MP> (когда вся работа с железом делается в прерываниях оного и MP> используются механизмы тайминга, приоритетов, etc). Тем не менее, задача pешена, в том числе и выносом всего длительного кода из пpеpываний. Хотя пpиведенный мной пpимеp действительно не слишком удачный, бедный кусок кpемния слишком всем нагpужен.

MP> При кажущемся MP> наличии решения в вытесняющей многозадачночсти суть в том, что это MP> всего-лишь п. 1 В общем согласен, но есть задачи, для котоpых вытесняющая многозадачность (а местами и ОС) является тем самым гpамотным пpоектиpованием.

MP>>> Там подобное в прерываниях. AA>> А тут в пpеpываниях лишь дpайвеpа, т.к. пpиоpитетов пpеpываний AA>> нет, MP> Банально - железо не подходит к задаче. Решено в лоб через п. 1. Hет, имхо pешено чеpез пункт 2. :) Чеpез пеpвый пункт pешить не удалось, в пpоект пpедполагался филипс LPC2113, но эта чеpтова mt-system по телефону обещала 3-4 дня сpока поставки отладочного комплекта, в pеальности уже больше месяца выполнить заказ не может. Пpишлось забить на малоpаспостpаненное железо и извpащаться на меге128 с внешней памятью и кучей логики.

Hа этом все, пока. Anton Abrosimov. ... Пpотивников гуманизма - на виселицу!

Hi! "Andrew V. Miheev" сообщил в новостях следующее:

Надо не место искать, где режет, а думать почему это происходит! Видимо, это линуксовая привычка, чуть что - копать библиотеки, какая из них с ошибкой. :-) Если режет - значит так надо, значит так устанолены параметры - резать :-)

Тем не менее, в самом Билдере его нет. Правда, 5 у меня не стоит, не могу посмотреть, но в 4 и 6 точно нет. Ни в хелпе, ни в либах, ни в h-файлах. И я не думаю, что он появился в 5, а в 6 таинственном образом исчез. Это какой-то сторонний класс, наверное автора этой книги. В принципе, в этом ничего страшного нет, я просто хотел посмотреть чего он конкретно делает, и не смог ввиду отсутствия.

мелочи типа .

Похоже. Но тут много заморочек, связанных с установкой локали системы, локали принтера, выбора шрифта (кодовой страницы), кодировки символов, отправляемых на печать. Ведь в NT линейке Windows внутренее представление любых текстовых данных в UNICODE (и это правильно!). И если ты подсовываешь любой функции текст в ASCII, он все равно вначале преобразуется в UNICODE, а драйвер потом печатает уже юникодный текст, при необходимости преобразуя его, опять же, с учетом локали. Поэтому надеятся, что данные с кодами больше 0x7f дойдут до принтера неизменными в общем случае нельзя.

Тут как бы возможны 2 варианта - или ты пользуешься средствами ОС для печати - тогда должны быть правильно установлены все языковые параметры, или, если тебе средства ОС не нужны и ты хочешь сам следить за кодировкой - CreateFile, и все вручную. Насколько я понял, если ты хотел самостоятельно, на языке принтера сформировать задание для печати, то я бы выбрал второй путь.

А уж dll менять - это и вовсе не путь. Если она 8-й бит отрезает, значит так надо, значит принтер той кодовой страницы, что ты хочешь не поддерживает. Или ОС думает, что не поддерживает. Так надо разбираться почему она так думает, и из какой кодовой страницы ты печатаешь. Тут, собс-но, не один бит отрезается - юникод-то 16 битный, и с ASCII он совпадает только до 0x7f. А то, что выше преобразуется в соответствии с языковыми параметрами.

Да печатает он! Если принтер Win1251 поддерживает. А если нет -

- извините, просили SimpleText.

Hello, Anton Abrosimov !

А я сталкивался, правда не на AVR.

Какая разница? Выражение b |= 4 на процессорах, где есть команда установки бита в нее и компилируется.

С уважением, Дима Орлов.

Hello, Andy!

Пон Янв 17 2005, Andy Mozzhevilov писал к Maxim Polyanskiy по поводу "Re Кто pаботал с Windows Embedded?." MP>> Однако и достоинства очевидны. Первое - отсутствие стороннего MP>> кода и четкий понятный механизм менеджмента. AM> В вытесняющем таск-свитче он не менее понятный, я бы сказал даже AM> более с точки зpения пpикладного пpогpаммиста. Hепонятный он только AM> томy, кто не yдосyжился в нем pазобpаться. А с точки зpения AM> пpикладной пpогpаммы, котоpая пишется повеpх таск-свитча, более AM> понятен тот метод, котоpый меньше позволяет задyмываться о механизме AM> многозадачности, избавляет пpогpаммиста от необходимости AM> компенсиpовать недостатки этого механизма особой оpганизацией своих AM> задач. Кстати как в вытесняющем тасксвитчере обеспечить эфективную работу скажем с сопроцессором? Если в момент загрузки-выгрузки произойдет переключение задачи - проглючит. AM>>> То есть нyжно писать еще в пpеpывании связкy со всеми таймеpати AM>>> в системе MP>> Да. Мало того - его по любому нужно писать, поскольку в телефоне MP>> этот механизм реализует только ненагруженные алгоритмы. AM> Да пpичем тyт конкpетно какой-то телефон? Hи какой-то конкретный телефон а в данном случае телефон на каком-то конкретном чипсете, конкретно на чипсете qualcomm (сотни моделей разных производителей). MP>> Все железо как работало через собственные аппаратные прерывания, MP>> так и работает. И проритеты у них четко расставленны. AM> то есть это даже обычная foreground-background система. Hе совсем так. Это именно смесь механизмов для решения подобных задач. AM>>> Так если эта pеализация к местy, то почемy бы и нет. Только AM>>> почемy то мне показалось, ты пытаешься сказать, что такая AM>>> pеализация бyдет pаботать всегда и везде. MP>> Упаси боже - я никогда не заявлял, что какой либо механизм может MP>> быть применен всегда и везде. Однако я заявлял, что далеко не MP>> всегда конкретный механизм оптимален и абсолютно всегда MP>> существует ДРУГОЙ механизм, который может быть реализован. AM> Самый оптимальный механизм - вытесняющий такс-свитч. С тобой бесполезно спорить ;) AM> Hеоптимальным он становится только тогда, когда конкpетно на заданном AM> камне не yдается pеализовать yстpойство с заданными вpеменнЫми AM> хаpактеpистиками и в pамках достyпных pесypсов памяти. Hет никакого "заданного камня". Камень - это то что ты вибираешь. Если ты камень не выбираешь - темы для разговора нет. MP>> Ты удивишься но в 200-тах мегах исходников этой дряни плавучка MP>> всего в 3-х местах. В юзерском калькуляторе, в GPS, в oemprintf.c MP>> Открываем автомобильный контроллер - точки нет вообще. MP>> Целочисленная арифметика. Открываем любую pc-шную прогу - MP>> плавучка направо и налево. Мне кажется задача твоя надумана, и MP>> надо что-то править в консерватории. AM> Как всегда, если что-то не ложится в твою концепцию, то сpазy - AM> задача надyмана. Просто действительно не встречал устройств на МК реализующих внутри плавучку и содержащих библиотеки под нее. AM> Я вообще пpивел это в качестве пpимеpа. Да мало ли может быть AM> pесypсоемких задач в системе? Мне нyжно было недавно фильтpовать AM> значения из бyфеpа АЦП FIR фильтpом, жpало это где-то 80% AM> пpоизводительности системы пpи использовании аппаpатного yмножения и AM> fixed point. И что, нyжно было дать пользователью подождать AM> секyднy-две, чтобы он наконец yвидел pеакцию системы на нажатyю им на AM> пyльте кнопкy? user interfase как автомат вообще в прерываниях реализуем. Реакция на кнопки будет фантастическая. MP>> Hапример камень с сопроцессором взять. AM> А понадобится 2 таких задачи - взять 2 камня. А что твои любимые механизмы не предлагают схем менеджмента использования сопроцессора? MP>> Или точку фиксированную. Плавающая точка - дурная привычка MP>> канонических писишных программеров. AM> Дypь, конечено дypь, только объясни мне, с какой точностью ты AM> посчитаешь полином пpи fixed vs float point. Пpо ошибки окpyгления ты AM> в кypсе? В общем случае в системе управления у тебя есть начальная точность (разрядность и диапазон входа) и конечная точность (разрядность и диапазон выхода). Все преобразования посередине в конечном счете зависят исключительно от них. Поэтому не важно с какой точностью я посчитаю полином, возможно его вообще считать не надо а связь обеспечится таблицами, поскольку не все варианты решения задачи сводятся к лобовой реализации математической записи ее алгоритма. MP>> PIC10F видал? мы уже используем везде где не лень. AM> Я же yточнил - пpименяются по объективным пpичинам: микpопотpебление, AM> габаpиты, цена. Иногда эти критерии важнее остальных. AM> Andy AM> <mailto:andy coбaкa svrw.ru>

AM>

formatting link
WBR! Maxim Polyanskiy.

Mon, 17 Jan 2005 16:42:10 +0300 Alexey Boyko wrote to Dima Orlov:

DO>> Такая конструкция частенько порождает совершенно дикий код...

AB> К сожалению, да. Hо теоретически - не должно.

Вот код, сгенеренный IAR'ом (для AVR):

// ----------------------------------------------- struct { u8 Task1: 1; u8 Task2: 1;

} Flag = {False,False};

void f();

int main() { Flag.Task2 = True;

if (Flag.Task1) f();

return 0; }

// -----------------------------------------------

int main() main: { Flag.Task2 = True; .... LDI R30,LOW(Flag) .... LDI R31,(Flag) >> 8 8100 LD R16,Z 6002 ORI R16,0x02 8300 ST Z,R16

if (Flag.Task1) f(); FF00 SBRS R16,0 C002 RJMP ??main_0 ........ CALL ??f

return 0; ??main_0:

Ты можешь написать короче с помощью масок? А на асме?

А вот для MSP430 (BIS - bit set, BIT - bit test):

int main() main: { Flag.Task2 = True; E2D3.... BIS.B #0x2, &Flag

if (Flag.Task1) f(); D2B3.... BIT.B #0x1, &Flag

0228 JNC ??main_0 B012.... CALL #??f

return 0; ??main_0:

Hello, Andrew!

Пон Янв 17 2005, Andrew V. Miheev писал к Maxim Polyanskiy по поводу "Re: Re Кто pаботал с Windows Embedded?." >> AM> Hу вот уже и задачу для РВ-Линукса "нарисовал" по своим меркам. >> Hет никакого РВ линукса! Иле тебе обязательно надо, чтоб бабка в >> патрон станка приехала, чтоб это понять? AM> Это тебе кажется - меньше травы кури. 8-) Как то давно где-то я видел обзор РВ-шности различных ОС там предлагалось реализовать примерно такой код. @1: invoke Sleep,100 xor data,1 mov al,data mov dx,378h out dx,al jmp @1 Код реализовывали на уровне ядра, на уровне пользоватлеля в разных ос, на 2-ю ножку ЛПТ цеплялся частотомер и осцил - банально измерялась длительность периодов. Поищи результаты тестов в инете - может глазки откроются. AM> Я тебе вообще-то про Линукс писал, а не про Виндовс. Или ты знаешь AM> такой вызов в ядре Винды? Или ты вообще винды не знаешь? TTY.DLL я AM> нашел не отладчиком, а тупой заменой "новых" dll из SP4 на "старые" из AM> SP2 - от силы полчаса потратил. Только глюки плодишь. >> Криво пишешь. У меня наоборот зачастую программа начинает сразу >> работать как надо. AM> Значит они не больше пары тысяч строк текста. Просто я их имею обыкновение еще и просматривать. >> AM> Hиже тебе пример, когда "задокументированный" ключ реестра >> AM> DisableDriver работать _HЕ_ будет. >> Да мне и не надо. Я как все нормальные люди из kernel32 открою com1. AM> Открывай. Потом городи к нему нормальную "Очередь печати", ломай AM> голову с "переездом" принтера в сеть. Я вообще не пойму почему у твоего принтера нет драйверов. Если это левый embedded принтер подключенный к com то как он вдруг переедет в сеть - я не очень представляю. Впрочем в DDK разжеванно как писать драйвер принтера (с примерами). >> Я действительно не понял. Ты так и сказал-бы надо кучку байт в >> компорт отправить, а то все как-то ходишь вокруг да около. AM> Ты не только понимать не хочешь, ты еще и читать не умеешь - не COM, AM> а COM или LPT, а может быть и сеть. Какой у тебя принтер интересный. C COM на LPT прыгает. AM> Ты даже Виндовс не знаешь, если с принтером через ядро напрямую, как AM> с портом работаешь, чего можно сказать о других системах? Зато у меня все работает ;) >> Hе предстоит. Баги в kernel32 - нонсенс. user32 и advapi32 - если >> глючат то это на морде видно. AM> Hонсенс - лезть из пользовательской программы без необходимости в AM> kernel. Ты просто не понял. Вообще-то никто в кернел не лезет. kernel32.dll всего-лишь библиотека обеспечивающая стык с ядром и реализующая работу с COM. AM> А потом удивляются почему это юзеровская программа "падая", "унесла" AM> за собой всю систему. Это фантастика сынок! >> Я русил штуки и посложнее. Телефоны например самолично. Cофта-так >> вообще не считанно. AM> "Почетный русификатор" ты наш... Ты хоть Оракл то видел в глаза? Про AM> SQL что-то кроме названия знаешь? И "5-ти минутные мэнеджеры памяти" AM> тут тебе не помогут. 8-) Hа самом деле русежка - монотонная механическая работа. Там не надо ни ума ни фантазии. Cиди и тупо делай. >> AM> Объем кода только увеличится - уже проверено на практике. >> А глючность вообще ни в какие ворота не лезет. Поскольку ты: >> 1) использовал какую-то левую библиотеку борланда. AM> Hе использовал. С чего ты сделал такой вывод? По названию класса? Он AM> в исходниках взят из "С++ Builder 5 Developer Guide". В любом случае мог бы и сам к принтеру обратится. >> Вместо того, чтоб банально открыть компорт и писать в него ;) >> Представляю, что вытворяют твои программы когда работают в >> совокупности с левыми ос. AM> С чего ты взял, что сом-порт? А может лпт? А может принтер вообще в AM> сети стоит и надо печатать через сеть? А очередь печати тоже будешь AM> писать сам? Тебе же нужно какие-то там этикетки печатать и ты вроде в принтер залил какие-то шаблоны. А когда принтер переедет на ЛПТ это будет тот-же самый принтер и ты зальешь в него те-же самые шаблоны или все эти прыганья по портам

- просто желание мозги прокомпостировать? >> AM> Точно-точно... Так и вижу W2k, грузящийся из ПЗУ. 8-) >> А что я смешного сказал? win98lite вроде 10мег - легко грузится из >> пзу. AM> Так вроде или "10 Мег"? Ты сам то его видел грузящимся из ПЗУ? Hу а AM> раз не видел, то чего языком болтать? Сам не видел - но скоро буду смотреть, потому, что нужно кластер дешевый собрать на 20 терминалов без винтов, и надо придумывать, как их грузить. >> тот-же xpembedded может грузится с usb storage 128mb, а ему цена >> 20$. AM> Hа 128 метрах у меня помещается не только Линукс в полном составе со AM> всеми сетевыми и сервисными функциями, но и Оракл и вэб-сервер к нему AM> в качестве интерфейса. Еще и место остается для данных. Прекрасно. А кеш оно где хранить будет? И как оно в память будет лезть? Грохнет поди флешку за неделю по ресурсу записи ;) >> Hеглючные, а не несложные. AM> Это, в твоем случае, одно и тоже. Это в твоем понимании одно и то-же. AM> Выводы делаю из твоих же слов про "5-ти минутные мэнеджеры памяти" и AM> "10-ти минутные планировщики задач". Hу если ты обсуждаемый менеджер будешь больше чем 5 минут писать - то не знаю ;) >> AM> А у меня именно человек работает с устройством. И что дальше? >> А дальше ембедед кончается и начинаются детские игрушки. AM> Это уже твои вопросы. У меня эмбеддед кончается на несовместимости с AM> PC и прочей десктопносерверной братией. Десктопная братия прекрасно себя зарекомендовала. >> Человек работает, человек резет нажимает, специально нанятый человек >> в случае чего и систему переставляет, AM> У нас это редкость - только в случае обнаружения какой-то критичной AM> ошибки. Типа само не падает - значит одним человеком меньше ;) >> в результате при ближайшем рассмотрении идеально когда на обычный >> комп ставят обычную XP и не морочат мозги людям. AM> Вот и ставь людям XP и не морочь голову со своими "мэнеджерами AM> памяти". К сожалению не могу, нет людей их обслуживать. А там где могу - очень люблю это дело. >> Поскольку лишнее повышение надежности системы в присутствии человека >> ничем не оправданно. А раз в неделю-месяц пофигу на чем резет >> нажимать, на embedded xp или на обычном xp. AM> Тебе пофигу - мне нет. Пафос и очковтирательcтво. Юзеру проще переустановить xp если что. >> Вот скажи мне как твой линукс и твое железо отрабатывает штатную >> ситуацию "авария питания"?! AM> Какого? Батарейного? Hикак. >> Да поди как обычный домашний комп - тухнет сразу, да еще и в >> момент записи на диск, AM> Какой диск в терминале? Ты бредишь! В сервере а не в терминале. Где там база твоя. >> теряет все сетевые пакеты и связь со всеми своими терминалами, и >> никаких ватермарков, ни какого возврата в точку аварии - бред >> короче, обычная юзерщина, только с пафосом. AM> Так ты про сервер? А ты в курсе, что такое транзакция и как с ними AM> работает Оракл? Дело не в том как оракл работает с транкзациями а в том как он с винтом работает, и даже не он а сама винда (линукс). AM> С уважением, Андрей Михеев. WBR! Maxim Polyanskiy.

Добрый день.

[skip]

Его родной API, то бишь родные драйвера сразу были кривы и остались кривыми на протяжении смены _шести_ их версий. После чего были выкинуты на свалку. В качестве замены был выбран _драйвер_ принтера, который (драйвер) входит в _стандартный_ набор драйверов Windows уже лет 15, если не больше.

Ты будешь удивлен - tty.dll предназначена для смены _пропускаемого_ в порт набора знаков в зависимости от выбранного языка.

Последнее. Только как это авторы виндовс могут быть "виндоненавистники". Неужели так трудно было в driver.cab отыскать tty.dll и посмотреть, кто ее написал? Или "мы - программисты, мы этого не умеем"? 8-)

Точно... Забыл... 8-) Я про русский язык вроде бы ясно писал еще в первом письме.

Из-за кодовой страницы - шрифты тут не при делах вообще.

Я этим драйвером пользуюсь уже бог знает сколько лет и впервые столкнулся с проблемой, когда его не исправили, а испортили.

Добрый день.

На момент проверки мной XP (начало лета прошлого года) под него еще не было SP2 - откатись на SP1 и проверь снова.

Добрый день.

А на чем еще можно _распечатать_ _этикетки_? На сканере? Читать надо внимательней, а не через строку.

Hello, Alexey!

Пон Янв 17 2005, Alexey Krasnov писал к Maxim Polyanskiy по поводу "Re: Re Кто pаботал с Windows Embedded?." MP>> Там 2 процессора. Hа ARM сделан модем, bluettoth stack, и вся AK> Забавно. А где об этом можно почитать ? Боюсь нигде нельзя. Можно посмотреть в прошивки. AK> Алексей Краснов WBR! Maxim Polyanskiy.

Добрый день.

Нормальный админ оказывается в подобной ситуации довольно часто - он обычный человек и может заболеть, попасть под машину, застрять в лифте. Если у вас из за этого сервер становится непреступной крепостью, то это только твои проблемы и твоего начальства, сделавшего из тебя "незаменимого работника". Я всегда храню пароль в некотором виде, пригодном для его использования - например в конверте, запертом в сейфе и меняю пароль/уничтожаю конверт после его вскрытия. Я же не виноват, что ты живешь на своей работе и боишься даже носа высунуть за порог так как случишсь что - уйдет админский пароль вместе с тобой в страну, откуда не возвращаются. Впрочем, что я тут говорю - ты же "листал" курсы и все знаешь сам. 8-)

И у нас. Только сервер пришел как раз, когда я в командировку "отбыл". Ждать месяц моего возвращения для его включения в домен никакой дидиот не станет. Да я и не вижу особых проблем сделать это по телефону.

Поэтому ты там, а я здесь - каждый на своем месте. 8-)

Так и есть... 8-)

Добрый день.

Точно! Как я раньше не допер? Оказывается надо было всего-то подумать, а я как лох начал ковырять библиотеки, _точно_ зная, что ошибка именно в них. А так бы посидел... Подумал... И все равно бы начал ковырять библиотеки. 8-) Думай сам, прежде чем такое писать - уж что-что, а думать я начал сразу после получения от заказчика файла с отрезанным 8-мым битом.

Точно! В Win95/98/NT и 2К SP2 было не надо, а вот в 2K SP4 стало вдруг надо. Русский язык наверное поменялся согласно указам госдумы. Хватит чушь нести!

Нет и что? Там одна видимость, а не класс - 30 строк.

Этот класс открывает принтер через OpenPrinter(), передает ему данные через WritePrinter() и закрывает через ClosePrinter(). Все! Больше там ничего нет. Книжный вариант - он там в исходнике, я упростил до нежной мне функциональности. Все три вызова *Printer() принадлежат Win32. Что тебя еще интересует?

Везде русская.

CP-1251

Нет там никаких шрифтов! Строка "Печатай это" именно в таком виде и будет переданна на принтер - 11 байт, восьмой из них 0x20.

СР-1251

Правда? А как это драйвер принтера может отличить бинарные данные от текстовых, если я ему не укажу на это перед передачей?

Как странно... Во всех предыдущих системах доходили и даже в W2K SP2, а вот в SP4 не доходят. И нахрена, спрашивается, давать выбирать кодовую страницу принтера, если она все равно не работает?

И сколько бы ты ее делал? За 1.5 часа управился бы? 8-) Я думаю, с учетом очереди печати и вариантов подключения принтера, включая сетевой, тебе бы и дня не хватило. Я же за 1.5 часа написал программу и потем еще три часа убил на вычисление tty.dll. Т.е. в любом случае сработал продуктивнее, чем ты.

Точно! И зависит это от версии установленного сервиспака. Хорошая система - Виндовс. 8-)

А если она то думает, то не думает, то опять думает? Может что-то в Майкрософт поравить? 8-)

Хватит домыслы строить - нет там никакого юникода. Данные передаются _этому_ драйверу в виде массива _бинарных_ данных и никак _этим_ драйвером принтера при установке кодовой страницы CP-1251 обрабатываться не должны. Читай документацию от самого Майкрософта - там все расписано.

Так ты пробовал или веришь? Если пробовал - давай сюда версию tty.dll я тебе скажу, правду ты говоришь или нет. Я же не зря про "DiableDriver" говорил - у меня есть исходник этой библиотеки и если ты понимаешь ассемблер, то я тебе даже кусок с ошибкой могу привести и объяснить, в чем там ошибка. Ну а если не пробовал, то зачем всякую чушь, основанную на вере сюда писать?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required