Функция WinAPI RasDial возвращает Error 668

Тема в разделе "Delphi - Сети", создана пользователем ivs4, 1 фев 2005.

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

    ivs4 Гость

    Господа, помогите. Уже не первый форум пытаю. Запускаю RasDial в составе ActiveX контрола в цикле для дозвона. Под Win98 цикл отрабатывает столько сколько ему положено, а под Win2K/XP после первого вызова метода ActiveX контрола выбрасывается ошибка 668. Причем если запустить цикл в ручную, то он начнет снова звонить, а на втрором проходе цикла опять в ошибку... Как уйти от этого т.к. цикл для этого метода ActiveX контрола принципиально необходим.
    Примерно так на WSH:
    set obj=Wscript.CreateObject(Dialing.RasDial)
    for i=0 to 4
    obj.Dial(.....)
    next
     
  2. Barmutik

    Barmutik Гость

    Дело в том что связь сразцу не рвётся и должна быть выдержана пауза секунды 2-3 перед очередным набором..

    Больше информации по адресу:

    http://msdn.microsoft.com/library/default....asclnt_2ks0.asp

    Вот выдержка из MSDN:

     
  3. Guest

    Guest Гость

    Уважаемый, Barmutik.
    Описываемый вами момент я учитывал в своей программе. После неудачного дозвона я выполняю RasHangUp. После него вызываю в цикле RasGetConnectStatus(hrasconn), пока эта функция не возвратит значение 6.
     
  4. Barmutik

    Barmutik Гость

    Ну тогда нужно больше инфы что б понять Вашу проблему... данная проблема возникает на всех компьютерах или только на ограниченном их количестве ? На каких операционных системах ?
     
  5. ivs4

    ivs4 Гость

    Проблема возникает на всех компьютерах на ОС WinXPPro/2000Pro/2003Server.
    Вкратце код функции DIAL AxtiveX (по памяти):
    Код (Text):
    Err=RasDial(....);
    f err<>0 then
    begin
    Err=RasHahgUp(h);
    if Err=0 then
    begin
    do
     Err=RasGetConnectStatus(h);
    while Err<>6
    end;
    end;
    Вызов этой функции из Win Script:

    set t=createobject("dialing.ringx")
    For i=1 to 2
    h=t.DIAL(...)
    next
    P.S. Спасибо за отклик и помощь.
     
  6. Barmutik

    Barmutik Гость

    Ну так вообщем проблем не видно по этому коду .. хотя полный код был бы лучше... единственное что может быть стоит добавить:

    Код (Text):
    do
    Err=RasGetConnectStatus(h);

    Sleep(1000);
    Application.ProcessMessages;

    while Err<>6
    Для того что б отдать системе время на выполнение ... потому как потенциально Вы можете занять 100% времени в цикле и у системы простоне будет времени что бы закрыть соединение.
     
  7. Guest

    Guest Гость

    Уважаемый, Barmutik.
    Попробовал предложенный вами вариант. К сожалению проблема осталась. Настораживает что все это под NT операционками.
     
  8. Barmutik

    Barmutik Гость

    Просто нет машины под руками что б проверить :) Но как-то странно .. если б наоборот по 95\98 была проблема было бы понятно .. а вот так .. надо поискать машину и попробовать ...

    Потенциально проблема может быть в использовании ActiveX контрола ...а если вынести код в отдельную программу и попробовать? Просто для теста .. что бы выяснить работает ли код в обычном приложении ...
     
  9. Guest

    Guest Гость

    Еще занимательно то, что в ручную скрипт(внутри без цикла) запускается без ошибок сколь угодно раз и с каким угодно малым интервалом.
     
  10. Barmutik

    Barmutik Гость

    Написал я тестовый примерчик ... попробовал на 2000 и ХР... всё чудно работает ... на 95 и иже не пробовал .. т.к. не могу их поблизости нигде найти ...

    Подключает .. 30 секунд работаем .. отключаем ... 30 секунд пауза .. подключаем ... всё прекрасно работает ...
     
  11. Barmutik

    Barmutik Гость

    Забыл добавить что прожка тестовая НЕ ActiveX .. а просто виндовс приложение...

    Ну так если проблема в цикле .. что в принципе странно .... и если надо цикл только 2 раза позвонить .. так может разложить цикл на итерации и не мучаться ?
     
  12. zubr

    zubr Гость

    Я пишу клиент-серверный компонент DualUp соединения для Delphi. Так вот у меня была похожая проблема - без цикла тест-программа работала, а в цикле ни в какую. Свою ошибку я нашел - причина в том, что буфер Com-порта не успевал очищаться. Похоже здесь такая же проблема.
     
  13. ivs4

    ivs4 Гость

    Перевел свой вариант дозвона в exe. Без изменений.
    Код (Text):
    receive:=RasDial(nil,nil,pRas,0,nil,hConnect);
    в запись pRas записываю размер записи, имя точки входа, логин, пароль.
     
Загрузка...
Статус темы:
Закрыта.

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