Проект был в виде EXE. Отлажен и проверен в работе. Переношу функции в DLL и запускаю на выполнение через DLLMain. Выполнение зависает на HTTPSendRequest. Код точно такой же как в работающем EXE. Код (Text): bool GetCommand(void) { HINTERNET hInet; hInet = InternetOpen(TEXT("My agent"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if (hInet!=NULL) { HINTERNET hConnect = InternetConnect(hInet,dstURL,INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1u); if (hConnect != NULL) { _tcscpy_s(getLine,TEXT("/dlln/getcmd.php?act=00000&id=")); HINTERNET hRequest = HttpOpenRequest(hConnect,TEXT("GET"),getLine,NULL,NULL,0,INTERNET_FLAG_KEEP_CONNECTION,1); if (hRequest != NULL) { BOOL bSend = HttpSendRequest(hRequest, NULL,0, NULL,0); ...
В DllMain может быть только один работающий поток. Все остальные вновь-созданные остановлены до того момента, как длл-майн не вернет управление. Работу с сетью в длл-мейн проводить не следует
dyn Все не остановлены, а только обратившиеся к загрузчику и ожидающие освобождения кс первым тредом. Это можно обойти легко, поиск по форуму юзаем.
dyn понимаю, что не стоит, но ведь возможно. У меня один тред и пусть бы он выполнил задание и отпустил DLLку дальше. Главный вопрос - какое отличие при выполнении одного и того же функционального кода из EXE и DLL. Приведённый код точно доходит до HTTPSendRequest и виснет в ожидании.
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
smax критическая секция, но вам это не нужно. Создайте поток и все. Это не ваш тред. на сокетах должно работать, но это вам тоже не надо.
думаю, что сетевые либы имеют свойство подгружать другие либы более низкого уровня как ws2_32.dll и wshelp с ней, а LoadLibrary в Dllmain скорей всего приводит к дедлоку - так что попробуй сделать все на чистых сокетах
karabas_barabas именно это сейчас и пробую. Интересно еще, что первый вариант в разных версиях отлично работал при тестах на VMware виртуалках... С гостевой - XPSP3, такой же как и на тестируемых не виртуальных машинах, где не работает..