Что за чушь?
От: _d_m_  
Дата: 27.08.09 00:54
Оценка: -2
.Net 3.5

Есть принтеры штрихэтикеток, печать на этих принтерах осуществляется напрямую без участия драйвера (т.е. используется язык управления принтера). Для этого до настоящего времени используется ActiveX написанный на C++ мной еще в 2002 году. Вобщем принцип такой — на входе имеем унифицированный параметризованный шаблон этикетки (XML), XSLT трансформацию в язык принтера для разных производителей принтеров, на выходе получаем поток который валим на: LPTx, COMx, USBx, дисковый файл, сетевой пайп (для сетевых принтеров). Для этого используется внутрях ф-ция WinAPI CreateFile. Одна на все случаи.

Хотели поменять на сборку .Net. Но! Что за чушь? Я не могу открыть как файл как минимум LPT или COM. Любые классы потоков внутрях зовут конструктор FileStream-а и ошибка везде одна :

FileStream не открывает устройства Win32, такие как логические диски и ленточные накопители. Избегайте использования "\\.\" в пути.


Они что — в микрософте там совсем охренели?

Это что же это, мне надо экспортировать из WinAPI CreateFile, WriteFile? Ну гон...
Re: Что за чушь?
От: blblx Россия http://yegodm.blogspot.com
Дата: 27.08.09 02:02
Оценка: 1 (1) +2
Здравствуйте, _d_m_, Вы писали:

___>Это что же это, мне надо экспортировать из WinAPI CreateFile, WriteFile? Ну гон...


Возможно, можно обойтись только экспортом CreateFile...
El pueblo unido jamás será vencido.
Re: Что за чушь?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 27.08.09 03:31
Оценка: -1
Здравствуйте, _d_m_, Вы писали:

System.IO.Ports.SerialPort
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Что за чушь?
От: _d_m_  
Дата: 27.08.09 03:37
Оценка: +1 -3
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, _d_m_, Вы писали:


A>System.IO.Ports.SerialPort


Есть огромное желание поставить тебе минус. Догадаешься за что?
Re: Что за чушь?
От: HowardLovekraft  
Дата: 27.08.09 05:53
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Они что — в микрософте там совсем охренели?

"Бобер, выдыхай". (С)

По сабжу — да, только через интероп.
SerialPort — дрянь редкостная, настоятельно не рекомендую даже для RS-ных устройств, не гворя уже о том, что только с ними и умеет работать...
Re[2]: Что за чушь?
От: _d_m_  
Дата: 27.08.09 06:27
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, _d_m_, Вы писали:


___>>Они что — в микрософте там совсем охренели?

HL>"Бобер, выдыхай". (С)

Не, ну а чо? Это называется регресс. Когда CreateFile может работать c COM, LPT, USB, файлы, пайпы. А FileStream почему-то никак. Да и вообще с LPT в фрамворке никак.

HL>По сабжу — да, только через интероп.

HL>SerialPort — дрянь редкостная, настоятельно не рекомендую даже для RS-ных устройств, не гворя уже о том, что только с ними и умеет работать...

А что там может быть не так? Ведь всего делов-то было портировать набор необходимых ф-ций Win API в класс SerialPort.
Re[3]: Что за чушь?
От: HowardLovekraft  
Дата: 27.08.09 06:40
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>А что там может быть не так?

Лень искать свой пост где-то двух-трехгодичной давности.
В кратце — попытка сделать нечто универсальное породила монстра, который некоторые вещи делать просто не умеет, а те, которые делает, делает довольно своеобразно, с большим количеством ненужных телодвижений.
Re[4]: Что за чушь?
От: _d_m_  
Дата: 27.08.09 08:02
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, _d_m_, Вы писали:


___>>А что там может быть не так?

HL>Лень искать свой пост где-то двух-трехгодичной давности.
HL>В кратце — попытка сделать нечто универсальное породила монстра, который некоторые вещи делать просто не умеет, а те, которые делает, делает довольно своеобразно, с большим количеством ненужных телодвижений.

Но все-таки какой-никакой функционал есть. А вот зачем отрезать функционал? Как-быть с LPT Тока интероп. У кого есть более ранние фрамворки, попробуйте плиз открыть FileStream("com1").
Re[3]: Что за чушь?
От: Пельмешко Россия blog
Дата: 27.08.09 09:27
Оценка: +2 -1
Здравствуйте, _d_m_, Вы писали:

___>А что там может быть не так? Ведь всего делов-то было портировать набор необходимых ф-ций Win API в класс SerialPort.


Ключевое слово "WinAPI".
Вы не забывайте, что .NET какбэ в идеале кросплатформенный, а (есть ли / обладает ли подобным поведением) функционал, аналогичный CreateFile, на *nix-системах, например? Может Вы какие-нить виндовые mailslot юзать будете, которыми в линуксах и не пахнет, что тогда?

Нужен функционал WinAPI — так используйте его, какие проблемы...
Framework содержит более переносимый и абстрагированный от системы набор инструментов, не стоит удивляться тому, что там нету всего WinAPI...
Re[3]: Что за чушь?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 27.08.09 15:41
Оценка: -1
Здравствуйте, _d_m_, Вы писали:

A>>System.IO.Ports.SerialPort

___>Есть огромное желание поставить тебе минус. Догадаешься за что?


У тебя что-то не работало и виноват класс FCL. Угадал? Лично у меня всё ОК, хотя и не скажу что с первого раза.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Что за чушь?
От: Mr.Cat  
Дата: 27.08.09 15:55
Оценка:
Здравствуйте, Пельмешко, Вы писали:
П>Вы не забывайте, что .NET какбэ в идеале кросплатформенный, а (есть ли / обладает ли подобным поведением) функционал, аналогичный CreateFile, на *nix-системах, например? Может Вы какие-нить виндовые mailslot юзать будете, которыми в линуксах и не пахнет, что тогда?
В никсах точно так же есть "специальные файлы" (в /dev, /proc, например) и с ними можно работать как с обычными. Т.е. портирование програмы потенциально могло было заключаться в замене "LPT" на какой-нить "/dev/lpt".
Так нет же. Порезали возможность пользоваться "специальными файлами" — и это уж никак не ради кроссплатформенности.
Re: Что за чушь?
От: Mr.Cat  
Дата: 27.08.09 15:57
Оценка:
Здравствуйте, _d_m_, Вы писали:
___>Они что — в микрософте там совсем охренели?
Сдается мне, решили таким образом "закрыть" какой-нить баг.
Re[4]: Что за чушь?
От: _d_m_  
Дата: 28.08.09 00:33
Оценка: -5
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, _d_m_, Вы писали:


A>>>System.IO.Ports.SerialPort

___>>Есть огромное желание поставить тебе минус. Догадаешься за что?

A>У тебя что-то не работало и виноват класс FCL. Угадал? Лично у меня всё ОК, хотя и не скажу что с первого раза.


Нет, гадать не надо. Надо читать что я написал в исходном посте — благо там все четко и ясно расписано, и поэтому остальные "ответчики" дали четкие и ясные ответы. Вобщем получи "-", заслужил.
Re[2]: Что за чушь?
От: _d_m_  
Дата: 28.08.09 00:35
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, _d_m_, Вы писали:

___>>Они что — в микрософте там совсем охренели?
MC>Сдается мне, решили таким образом "закрыть" какой-нить баг.

Похоже на то.
Re[4]: Что за чушь?
От: _d_m_  
Дата: 28.08.09 00:53
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>Здравствуйте, _d_m_, Вы писали:


___>>А что там может быть не так? Ведь всего делов-то было портировать набор необходимых ф-ций Win API в класс SerialPort.


П>Ключевое слово "WinAPI".

П>Вы не забывайте, что .NET какбэ в идеале кросплатформенный, а (есть ли / обладает ли подобным поведением) функционал, аналогичный CreateFile, на *nix-системах, например? Может Вы какие-нить виндовые mailslot юзать будете, которыми в линуксах и не пахнет, что тогда?

Что-то я сильно сомневаюсь, что в МС озабочены данной проблемой. Это во первых.
Но даже если и так, отвечаю на вопрос "что тогда?" — выбросить исключение.
Более того, скажу что в *nix системах абстракция "устройства как файлы" развита более чем в Windows. Так что все даже проще.

Ты не путай две вещи: 1) набор классов, так сказать интерфейс FCL для моей проги, и 2) саму реализацию FCL, так сказать, что из WinAPI или какого другого API она вызывает. У меня как раз претензии ко второму.

П>Нужен функционал WinAPI — так используйте его, какие проблемы...


Ага, аналогия:
"
-В России нарушают права человека, что делать?
-Ну не нравится тебе жить в России езжай за бугор...
"

П>Framework содержит более переносимый и абстрагированный от системы набор инструментов, не стоит удивляться тому, что там нету всего WinAPI...


Удивительно непонимание.
Я как раз и требую переносимости и абстрагирования. Я открываю файл, а что за файл меня не волнует — дисковый, паралелльный порт или что еще. Причем все это реализуется через CreateFile — там это все есть. Вопрос: нахрен это отрезать?
В итоге код который мог бы быть таким:
var s = new FileStream(myFile);

превращается в анализ имени файла, выбор класса соответсвующего устройства, открытие потока для этого устройства.
Либо в интероп монстра CreateFile.
Re[5]: Что за чушь?
От: Пельмешко Россия blog
Дата: 28.08.09 08:29
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Удивительно непонимание.


Ну уж извините, был не прав...

В .NET 4.0 будет MemoryMappedFile, так глядишь в каком-нибудь .NET 7.0 будет brand new feature — "FileStream \\.\ support"
Re[6]: Что за чушь?
От: _d_m_  
Дата: 28.08.09 08:47
Оценка:
Здравствуйте, Пельмешко, Вы писали:

___>>Удивительно непонимание.


П>Ну уж извините, был не прав...


Да ничего-ничего

П>В .NET 4.0 будет MemoryMappedFile, так глядишь в каком-нибудь .NET 7.0 будет brand new feature — "FileStream \\.\ support"


Ага, что-то как-то со скрипом. Если учесть, что SerialPort появился только со 2-ой версии...
Re[5]: Что за чушь?
От: _d_m_  
Дата: 18.09.09 08:57
Оценка: -1
A>>У тебя что-то не работало и виноват класс FCL. Угадал? Лично у меня всё ОК, хотя и не скажу что с первого раза.

___>Нет, гадать не надо. Надо читать что я написал в исходном посте — благо там все четко и ясно расписано, и поэтому остальные "ответчики" дали четкие и ясные ответы. Вобщем получи "-", заслужил.


Это ты мне своими клонами минусов понатыкал? Ну если это хоть как-то утешит твои комплексы...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.