Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1
В принципе поток как таковой он может юыть привязан к окну. Но к сожалению в dll это надо самому прописывать, и наверно свое созданное окно в систему регистрировать. Затем поток как то к этому окну вязать и оконную процедуру. Вобщем я с этим никогда не сталкивался.
Но блин надо оооччень.
2то есть вы использовали исходные WSA функциии http://msdn.microsoft.com/en-us/library/ms741394%28v=VS.85%29.aspx ?
и затем бесконечный цикл на для recv() ?
3
CSocket асинхронный.
1- кто окно создает- тот его и поток. попробуйте грузить длл из нового потока. может все автоматом выйдет.
в чем сложность грузануть длль из потока? страшно длл грузить из длл?
2- да, функции WSA. у меня асинхронное. для асинхронки- либо окошки- либо IOCompletionPort. у меня с портом.
но можно и так- тупо висеть в recv() все равно быстрее не будет. надо просто заполнить несложные структуры- и все.
3- "только асинхронный" ? не верю. есть два режима
http://msdn.microsoft.com/en-us/library/09dd1ycd(v=vs.71).aspx
короче я все понял. вчера порылся в недрах CSocket. Выяснил, что он проверяет событие прихода по милисекундному таймеру. Этот таймер цепляется к окну CSocketWnd, которое создается в CSocket.
Получается, что надо полюбасу делать где то бесконечный цикл, по обслуживанию этого окна CSocketWnd.
А значит, что завязываться с MFC сокетами в DLL смысла нет. Прозрачнее будет, если напрямую работать с винсоком, сделать для них бесконечный цикл в отдельном потоке и слушать recv.
По сути это получится то же самое что и с CSocket, только все будет видно что и куда идет.
Получается, что надо полюбасу делать где то бесконечный цикл, по обслуживанию этого окна CSocketWnd.
А значит, что завязываться с MFC сокетами в DLL смысла нет. Прозрачнее будет, если напрямую работать с винсоком, сделать для них бесконечный цикл в отдельном потоке и слушать recv.
Про бесконечный цикл не понял. Можно просто делать blocking call.
Все получилось сделать без использования самописной DLL.
Работаю напрямую с Ws2_32.dll из MQL.
Летает :)
Все получилось сделать без использования самописной DLL.
Работаю напрямую с Ws2_32.dll из MQL.
Летает :)
исходник покажете?
исходник покажете?
конечно, весь код вот отсюда http://msdn.microsoft.com/en-us/library/ms737591%28v=VS.85%29.aspx можно сказать один в один.
все функции сокета просто импортнул
Кстати, Graff, я похоже нашел способ как работать с функциями, которые возвращают указатель. Помните, когда мы с вами с MySQL разбирались была такая проблема?
конечно, весь код вот отсюда http://msdn.microsoft.com/en-us/library/ms737591%28v=VS.85%29.aspx можно сказать один в один.
все функции сокета просто импортнул
Кстати, Graff, я похоже нашел способ как работать с функциями, которые возвращают указатель. Помните, когда мы с вами с MySQL разбирались была такая проблема?
помню, в списках изменений про строки и длл часто пишут, может что-то добавилось. Завтра можем попробовать с мускулом поработать.
вобщем идея проста и очевидна - это перегон указателей через memcpy. Если встречаются строки, то их вытягивать через strcpy.
то есть ему даешь указатель, а он тебе возвращает заполненный char массив. Этот массив потом присваиваешь структуре. Вобщем вот такая операция.
сами memcpy и strcpy работают нормально, только что проверил. теперь надо проверить их в боевых условиях.
по текущей теме сокетов есть такие функции - gethostbyname и getaddrinfo. Они как раз возвращают указатели на структуры c разными данными, в том числе и с NULL-terminanted строками.
так что можно поработать с ними.