Russian Qt Forum
Октябрь 01, 2024, 14:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)  (Прочитано 4090 раз)
mos4ever
Гость
« : Июнь 18, 2013, 11:18 »

Здравствуйте! Вопрос уже поднимался, но рабочего варианта не нашел.
Есть
1. Qt прога:
     connect(sok, SIGNAL(readyRead()), SLOT(onReadyRead()));
2. DLL на Qt:
EXPORT void sokConnect()
{
     sok = new QTcpSocket();
     sok->connectToHost(addr, 5588);
}
EXPORT void sendCmd()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out << (quint16)0 << 47;
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));
    sok->write(block);
}

3. вызов функций производится из приложения не Qt, в итоге слот onReadyRead() не срабатывает, если
EXPORT void sokConnect()
{
     int argc = 0;
     App = new QCoreApplication(argc, 0);
     sok = new QTcpSocket();
     sok->connectToHost(addr, 5588);
     sendCmd();
     App->exec();
}
то команда доходит и слот вызывается. Пробовал в поток запихивать App->exec(); но тогда при вызове sendCmd(); ничего не происходит
Может у кого есть рабочий вариант? Заранее благодарен!
« Последнее редактирование: Июнь 18, 2013, 12:09 от mos4ever » Записан
mutineer
Гость
« Ответ #1 : Июнь 18, 2013, 11:22 »

Какие-то обрывки непонятные
Записан
mos4ever
Гость
« Ответ #2 : Июнь 18, 2013, 11:25 »

Какие-то обрывки непонятные

А что непонятное, я напишу еще объяснение...
Записан
mutineer
Гость
« Ответ #3 : Июнь 18, 2013, 11:33 »

Не очень понятно что откуда вызывается и где не работает
Записан
mos4ever
Гость
« Ответ #4 : Июнь 18, 2013, 11:42 »

В Qt приложении создан QTcpServer

DLL с функциями отправки команд серверу

Вызывает эти функции из DLL приложение не QT, т.к. QTcpServer работает с сигналом
connect(server, SIGNAL(readyRead()), SLOT(onReadyRead()));
в DLL и стороннем приложении система сигналов и слотов не поддерживается, поэтому при вызове функции sendCmd сигнал до сервера не доходит, за это отвечает QCoreApplication::exec(); но мне зацикливать функцию нельзя, т.к. команда для отправки серверу не одна
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Июнь 18, 2013, 11:46 »

Посмотрите на метод waitForBytesWritten
« Последнее редактирование: Июнь 18, 2013, 11:49 от Old » Записан
mos4ever
Гость
« Ответ #6 : Июнь 18, 2013, 12:00 »

СПАСИБО ОГРОМНОЕ - ДВА ДНЯ МУЧАЛСЯ С ПОТОКАМИ!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.