Сетевой принтер

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем WoodooMan, 13 июн 2008.

Статус темы:
Закрыта.
  1. WoodooMan

    WoodooMan Гость

    как определить состояние сетевого принтера, включен он или нет, например, а то при работе с FastReport при попытке печати генерится эксепшен, который даже перехватить не удается, и прога уходит в глубокий даун... пробывал апишными функциями, но ничего не выходит... уже год морочаюсь с этой исключительной ситуацией, может тут уже с таким сталкивался?
     
  2. EugenOS

    EugenOS Active Member

    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    хм...а по-подробнее нельзя? Доводилось около года обслуживать и править по-мелочам чужую прогу на дельфях седьмых с фастрепортами, так там
    у меня три принтера было на контору(естессно сетевых) подобных проблем не припомню....кое-какие исходники остались, может чем смогу помочь...
     
  3. WoodooMan

    WoodooMan Гость

    вообщем при печати время от времени возникает exception, который даже не перехватывается... просто прога в даун уходит и все... отчеты делаю на quickreport 4, народ у меня работает либо с сетевыми принтерами, либо в терминальном режиме, я, конечно, могу преположить, что это мой косяк, потому что при печати в режиме отладки та же фигня, но я в принципе ничего особого и не делаю... формирую данные и показываю отчет в preview... и состояние принтера не получается определить... апишными функциями пробывал, они показывают, что все хорошо, даже при выключенном принтере, если он сетевой (но это из-за printspooler, ИМХО)... покажите на крайняк как с помощью апи на принтер документ отправлять, мне лишь бы глюк побороть...
     
  4. EugenOS

    EugenOS Active Member

    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    то есть как это не перехватывается(именно это я и просил "по-конкретнее")?
    Код (Text):
    try
    {
    Запуск_печати();
    }
    catch(...)
    {

    }
    не перехватывает?
    тут три варианта:
    1) данный эксепшн - суть есть внутреннее сообщение фастрепортов, а не эксепшн как таковой (т.к. любой необработаный эксепшн должен был быть перехвачен)
    2) ваша программа создана как не полностью "релизный" вариант, т.е. использует какие-то отладочные библиотеки. В режиме отладки, несмотря на перехват, борланды все равно выдают сообщения об эксепшенах. Попробуйте изменить настройки проэкта для "конечного продукта": убрать рантайм пакейджи, дебаг библиотеки и.т.п.
    3) Что-то в фаст репортах или драйвере принтера накердыкивается так, что уже не может подняться.

    Попробую покопать, но только на работе (дома вообще принтера нет, т.к. нужды не имею; как и сети - rак-то нечего объединять, дочка на своем компе мультики смотрит, а я на своем работаю :rolleyes: )
     
  5. WoodooMan

    WoodooMan Гость

    компилю я уже как готовый продукт, обижаешь начальник, на счет сообщения самого фаст репорта - вполне возможно, но ко мне приходит как access fiolation, и причем уже даже просмоторщик закрыть не получается, т.е. постоянно сыпит эксепшен, просто я вот именно, что писал report->print(); в try{ }catch(...) - не помогает... просто я из-за этого и перешел со стандартного для билдера 6 3-ей на 4-ую версию, но баг упорно преследует... хотя можно предположить и мою криворукость, просто уже чего я только не пробывал, а хотя бы изолировать это выпадание - не могу... а пользаки ворчат...
     
  6. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    похоже, что фастрепорт кидает SEH-исключение
     
  7. WoodooMan

    WoodooMan Гость

    ну оно пишет external exeption... вот интересно, можно ли его перехватить или как-то проверить, чтобы свою ошибку сказать и прога выжила...
     
  8. etc

    etc Гость

    Если кидает, значит можно.
     
  9. WoodooMan

    WoodooMan Гость

    в том-то и беда, что не получается, даже нашел ее обозначение сейчас в windows.pas - STATUS_INVALID_HANDLE... если бы перехватывало, то я не видел бы этого проклятого виндозного окна с сообщением, что у вас исключительная ситуация по коду $C0000008
     
  10. EugenOS

    EugenOS Active Member

    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Из ранних сообщений это было не очевидно, вот я и выдал все варианты которые пришли в голову.
    А раз исключение - Invalid Handle - значит можно попробовать посмотреть на значение этого хэндла, может там действительно инвалид?
    тогда можно этим воспользоваться, сначала получить этот хандл и по нему проверить валид он или инвалид.....

    как вариант попробуй воспользоваться классом принтера из фаст репортов
    Код (Text):
    class TfrxPrinter:public TfrxCustomPrinter

    с двумя конструкторами:
    TfrxPrinter(void);
    TfrxPrinter(const AnsiString AName, const AnsiString APort);

    и полем
    Handle
    фастрепорты по любому им пользуются, покопайся, может там есть то что тебе поможет. А апи я завтра на работе попоробую, вдруг чего найду
    (тоже ведь интересно)
     
  11. WoodooMan

    WoodooMan Гость

    Народ, а может такое быть из-з того, что я создавал не через report форму, а вручную мастерил ее... а на счет принтеров - я даже подкладывал TPrinter в отчет, та же фигня... просто я вчера в очередной раз гуглил инет... не я один такой уникальный, многие попали по этим ловушкам ядра...
     
  12. EugenOS

    EugenOS Active Member

    Регистрация:
    22 июл 2007
    Сообщения:
    27
    Симпатии:
    0
    Помню что обещал посмотреть...но все никак не хватает времени серьезно глянуть, а не серьезно естессно результат нулевой. На днях разгребусь и ш=гляну. Прошу прощения. :) :)
     
  13. WoodooMan

    WoodooMan Гость

    EugenOS , да все нормально, уже год с глюком борюсь переодически, так что не горит
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей