Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2007, 07:35   #1
delphi_coder
 
Регистрация: 15.09.2007
Сообщений: 4
По умолчанию проблема с wininet API

Есть функция:

Код:
function GetHttpString(URL: AnsiString; var OutData: AnsiString): Boolean;
var
hInet, hFile: HINTERNET;
DataBuf: Pointer;
TmpStr: AnsiString;
BytesReaded: Cardinal;
const
BufSize = 4096;
begin
result:=false;

hInet:=InternetOpen(nil,
                    INTERNET_OPEN_TYPE_PRECONFIG,
                    nil,
                    nil,
                    0);
if hInet = nil then Exit;

hFile:=InternetOpenUrl(hInet,
                       PChar(URL),
                       nil,
                       0,
                       INTERNET_FLAG_EXISTING_CONNECT OR INTERNET_FLAG_NO_CACHE_WRITE OR INTERNET_FLAG_RELOAD,
                       0);
if hFile = nil then
  begin
  InternetCloseHandle(hInet);
  Exit;
  end;
OutData:='';
GetMem(DataBuf, BufSize);
BytesReaded:=0;
  repeat
  SetString(TmpStr, PChar(DataBuf), BytesReaded);
  OutData:=OutData + TmpStr;
  BytesReaded:=0;
  if NOT InternetReadFile(hFile, DataBuf, BufSize, BytesReaded) then Break;
  until BytesReaded = 0;
FreeMem(DataBuf, BufSize);
InternetCloseHandle(hFile);
InternetCloseHandle(hInet);
result:=true; 
end;
Если функция в ЕХЕ, то нормально работает. Если эта же функция вызывается в DLL, то зависает при вызове InternetOpenUrl. Причем зависает, если комп в оффлайне (коннектится к локально запущенному серверу), в онлайне нормально коннектится к этому же самому локальному серверу. Что за чудеса?
delphi_coder вне форума Ответить с цитированием
Старый 17.09.2007, 09:20   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

врятли зависает... это ты подожди немного и он просто вернет что не может приконнектиться к серверу! соответственно если есть коннект то чего ему виснуть!
BOBAH13 вне форума Ответить с цитированием
Старый 17.09.2007, 11:17   #3
delphi_coder
 
Регистрация: 15.09.2007
Сообщений: 4
По умолчанию

Виснет еще как. Почему не знаю. Сейчас запускаю в отдельном потоке - не виснет.
delphi_coder вне форума Ответить с цитированием
Старый 17.09.2007, 17:22   #4
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

никогда не сталкивался с таким, но может нужно дать разрешение на выполнение других операций , при выполнении вашей функции....
просто при использовании dll - программа и длл используют один и тот же стек....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp

Последний раз редактировалось Pitbull; 17.09.2007 в 17:27.
Pitbull вне форума Ответить с цитированием
Старый 18.09.2007, 14:08   #5
delphi_coder
 
Регистрация: 15.09.2007
Сообщений: 4
По умолчанию

Тоже раньше такого не наблюдал. Проблема решилась при запуске функции в отдельном потоке.
Но что это было, мне так и непонятно...
delphi_coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с UDP Pitbull Работа с сетью в Delphi 4 06.11.2007 09:35
WinInet vitalik007 Работа с сетью в Delphi 1 14.10.2007 13:09
проблема с *.chm FAiver Свободное общение 5 28.09.2007 21:01
проблема с URL Scorpeon Помощь студентам 1 18.06.2007 13:28
Подключение через WinInet SHEI'TI Работа с сетью в Delphi 1 15.02.2007 19:53