Никто не ответил.:(
Попытка два. Вот код dll.
#include <windows.h>
#include <ScktComp.hpp>
#pragma hdrstop
#pragma argsused
TClientSocket* pCS = NULL;
int WINAPI DllEntryPoint (HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) int __stdcall Create_TCP_Terminal ()
{
pCS = new TClientSocket (NULL);
pCS->Host = "192.168.0.2";
pCS->Port = 51000;
pCS->ClientType = ctNonBlocking;
pCS->Open ();
return 111;
}
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) void __stdcall Konec_TCP_Terminal ()
{
pCS->Close();
delete pCS;
pCS = NULL;
}
//---------------------------------------------------------------------------
Все простенько. Но функция из dll, вызванная из терминала, не открывает сокет с TCP-сервером на машине "192.168.0.2". Хотя эта же функция, вызванная из другого приложения все отлично открывает!
Может у кого есть время и желание помочь и воспроизвести у себя эту ситуацию (пусть в другой среде разработки и с другими компонентами, не важно) - буду благодарен. Особо надеюсь на разработчиков - вам же интересно выявить баги (мнимые или реальные) связанные с вашим продуктом?
Я реально уперся и не понимаю, почему так происходит...
Может проблема в вызове библиотеки из MQL, раз сама длл выполняется как задумано?
Да нет. Длл нормально присоединяется в MQL. Функция из длл нормально выполняется. Расставил пару MessageBox (NULL, "1", "1", MB_OK) по телу функции - все они появляются. Ерундель какая то....
Никто не ответил.:(
Попытка два. Вот код dll.
Все простенько. Но функция из dll, вызванная из терминала, не открывает сокет с TCP-сервером на машине "192.168.0.2". Хотя эта же функция, вызванная из другого приложения все отлично открывает!
Может у кого есть время и желание помочь и воспроизвести у себя эту ситуацию (пусть в другой среде разработки и с другими компонентами, не важно) - буду благодарен. Особо надеюсь на разработчиков - вам же интересно выявить баги (мнимые или реальные) связанные с вашим продуктом?
Я реально уперся и не понимаю, почему так происходит...
Может, для терминала адрес сервера будет отличаться от 192.168.0.2 ?
Да нет. Длл нормально присоединяется в MQL. Функция из длл нормально выполняется. Расставил пару MessageBox (NULL, "1", "1", MB_OK) по телу функции - все они появляются. Ерундель какая то....
А не в этом ли причина?
я тоже использовал эту компоненту, потом отказался, дело в том, что она работает с использованием системы сообщений, вся на ивентах, а они работают, конкретно в борланде, только если открыто окно формы, а в таком варианте, Вам это не реализовать, работайте с сокетами без использования компонент, напрямую через Winsock, не так оно страшно. И главное - все работает ;).
О! Это действительно похоже на правду. Благодарю! Премного!
О! Это действительно похоже на правду. Благодарю! Премного!
Если что, есть много книжек, из простого с примерами которые работают и дадут направление для простой реализации - Крис Касперски, самоучитель игры на Winsock.
Если что, есть много книжек, из простого с примерами которые работают и дадут направление для простой реализации - Крис Касперски, самоучитель игры на Winsock.
Преогромное спасибо за наводку! Все так и оказалось - действительно, для отлавливания эвентов необходимы либо что-то типа окошек либо пляски с бубном. Как-то сам не догадался про эвенты...
Тем не менее - 50 грамм поднесенные вовремя - дороже бутылки просто так (это я про вовремя поданный дельный совет:))
Ну и скорее всего буду копать по этому же компоненту - там есть блокируемый режим при котором эвенты не нужны - там свои заморочки, но это ближе мне, чем изучать винапи.
Главное - проблема локализована и есть варианты!
Удачи!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте уважаемые!
Суть моей задачи:
Пишу на борланде билдере 6, С++. Такой вот динозавр:)
Хочу по TCP протоколу отправлять на другой комп некие данные из терминала на mql4. Для этого написал dll. Пока простейшую - ибо сразу же произошел затык.
В dll используется компонент TClientSocket. Соответственно на принимающем компе есть приложение с компонентом TServerSocket.
Так вот, затык при попытке открытия сокета. Сама dll из терминала открывается, функция из терминала запускается (проверял меседжбоксами - все нужные точки проходятся).
А соединение не устанавливается.:(
Самое интересное, написал простое приложение, где по кнопочке вызывается эта же функция из этой же dll - запустил на компе, где стоит терминал - все проходит на ура, соединение устанавливается, серверная часть на другом компе видит присоединенного клиента.
Что может быть? Приветствуется любая помощь-совет, ибо пока в тупике:(