Russian Qt Forum

Qt => Работа с сетью => Тема начата: mos4ever от Июнь 18, 2013, 11:18



Название: [РЕШЕНО] DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: 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(); ничего не происходит
Может у кого есть рабочий вариант? Заранее благодарен!


Название: Re: DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: mutineer от Июнь 18, 2013, 11:22
Какие-то обрывки непонятные


Название: Re: DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: mos4ever от Июнь 18, 2013, 11:25
Какие-то обрывки непонятные

А что непонятное, я напишу еще объяснение...


Название: Re: DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: mutineer от Июнь 18, 2013, 11:33
Не очень понятно что откуда вызывается и где не работает


Название: Re: DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: mos4ever от Июнь 18, 2013, 11:42
В Qt приложении создан QTcpServer

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

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


Название: Re: DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: Old от Июнь 18, 2013, 11:46
Посмотрите на метод waitForBytesWritten


Название: Re: DLL + QTcpSocket вызов из не QT приложения (обработка сообщений)
Отправлено: mos4ever от Июнь 18, 2013, 12:00
СПАСИБО ОГРОМНОЕ - ДВА ДНЯ МУЧАЛСЯ С ПОТОКАМИ!!!