Разница в выполнении HTTPSendRequest из DLL и EXE

Тема в разделе "WASM.WIN32", создана пользователем smax, 21 сен 2010.

  1. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    Проект был в виде EXE. Отлажен и проверен в работе.
    Переношу функции в DLL и запускаю на выполнение через DLLMain.
    Выполнение зависает на HTTPSendRequest.
    Код точно такой же как в работающем EXE.

    Код (Text):
    1. bool GetCommand(void)
    2. {
    3.     HINTERNET hInet;
    4.     hInet = InternetOpen(TEXT("My agent"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
    5.     if (hInet!=NULL)
    6.     {
    7.         HINTERNET hConnect = InternetConnect(hInet,dstURL,INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1u);
    8.         if (hConnect != NULL)
    9.         {
    10.        
    11.             _tcscpy_s(getLine,TEXT("/dlln/getcmd.php?act=00000&id="));
    12.            
    13.  
    14.             HINTERNET hRequest = HttpOpenRequest(hConnect,TEXT("GET"),getLine,NULL,NULL,0,INTERNET_FLAG_KEEP_CONNECTION,1);
    15.             if (hRequest != NULL)
    16.             {
    17.                 BOOL bSend = HttpSendRequest(hRequest, NULL,0, NULL,0);
    18. ...
     
  2. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    В DllMain может быть только один работающий поток. Все остальные вновь-созданные остановлены до того момента, как длл-майн не вернет управление.

    Работу с сетью в длл-мейн проводить не следует
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    dyn
    Все не остановлены, а только обратившиеся к загрузчику и ожидающие освобождения кс первым тредом. Это можно обойти легко, поиск по форуму юзаем.
     
  4. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    dyn
    понимаю, что не стоит, но ведь возможно. У меня один тред и пусть бы он выполнил задание и отпустил DLLку дальше.
    Главный вопрос - какое отличие при выполнении одного и того же функционального кода из EXE и DLL.

    Приведённый код точно доходит до HTTPSendRequest и виснет в ожидании.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    smax
    Сосредоточтесь. Вот за вас поискал:
    http://www.wasm.ru/forum/viewtopic.php?id=38310
    http://www.wasm.ru/forum/viewtopic.php?id=38284
    http://www.wasm.ru/forum/viewtopic.php?id=37564
    http://www.wasm.ru/forum/viewtopic.php?id=37451
    http://www.wasm.ru/forum/viewtopic.php?id=37297
    http://www.wasm.ru/forum/viewtopic.php?id=37244
    http://www.wasm.ru/forum/viewtopic.php?id=36884
    http://www.wasm.ru/forum/viewtopic.php?id=35690
    http://www.wasm.ru/forum/viewtopic.php?id=32919
    http://www.wasm.ru/forum/viewtopic.php?id=31189
     
  6. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    Clerk
    что такое "кс"
     
  7. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    smax
    критическая секция, но вам это не нужно. Создайте поток и все.
    Это не ваш тред.
    на сокетах должно работать, но это вам тоже не надо.
     
  8. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    нужно из длл майн осуществить подключение
     
  9. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    думаю, что сетевые либы имеют свойство подгружать другие либы более низкого уровня как ws2_32.dll и wshelp с ней, а LoadLibrary в Dllmain скорей всего приводит к дедлоку - так что попробуй сделать все на чистых сокетах
     
  10. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    karabas_barabas
    именно это сейчас и пробую.


    Интересно еще, что первый вариант в разных версиях отлично работал при тестах на VMware виртуалках...
    С гостевой - XPSP3, такой же как и на тестируемых не виртуальных машинах, где не работает..