Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Проблема с QTcpSocket в dll


Автор: Oceola 6.4.2010, 18:01
Есть вот такой класс в dll написанный на Qt 

Код

class LIBEN304SHARED_EXPORT LibEn304{
public:
    LibEn304();
    QTcpSocket *socket;
    QString reply;
    QTimer  * ReadTimer;
    void myconnect(void);
    void disconnect(void);
    int esyn(void);
    int asyn(void);
    void write(QString command);
    void read(void);
.................
};


чтобы передать некоторые функции из класса в Delphi  я написал внизу функции которые потом вызывается из делфей например вот

Код

LIBEN304SHARED_EXPORT  void myconnect()
{
  cppclass = new  LibEn304;
  cppclass->myconnect();
  cppclass->write("a syn");

}


Функции компилируются.
  Вызываются из делфей так

Код

    procedure myconnect();  cdecl;
     external 'libEn304.dll' name '_Z9myconnectv';
     function mywrite():integer;  cdecl;
     external 'libEn304.dll' name '_Z5writev';
     procedure myread(a :pChar);  cdecl;
     external 'libEn304.dll' name '_Z4readPc';
     procedure mydisconnect();  cdecl;
     external 'libEn304.dll' name '_Z10disconnectv';


Нормально пишут там всякие сообщения.

 При соединении с  сервером ,  сервер пишет что типо соединение произошло!

На посылку сообщений не выскакивает не каких ошибок.

но при этом
не каких сообщений до сервера не доходит(((((
и обратно не возвращается


Где искать проблему не понятно(( 
 
код приведенных выше 3х функций
Код

  LibEn304::LibEn304()
{
    qWarning("Start DLL");
}

 void LibEn304::myconnect()
{
    qWarning("Connect");
    socket = new QTcpSocket;
      socket->connectToHost("127.0.0.1",10000,QIODevice::ReadWrite);
       qWarning( socket->peerAddress().toString().toAscii());


}


 void LibEn304::write(QString command)
{
    qWarning("Write");
    socket->write((command+"\n").toAscii());
}





 

Автор: borisbn 6.4.2010, 19:08
http://forum.vingrad.ru/act-ST/f-466/t-294650.html

Автор: Oceola 7.4.2010, 10:07
Извините ,я не матерый программист. Я чего то я там нечего не понял smile 

Получается  чтобы это сделать нужно в dll создать поток затем   создать объекты QCoreApplication и  QTCPSocket 

тогда заработает?))

Автор: borisbn 7.4.2010, 11:14
Цитата(Oceola @  7.4.2010,  10:07 Найти цитируемый пост)
Получается  чтобы это сделать нужно в dll создать поток затем   создать объекты QCoreApplication и  QTCPSocket тогда заработает?))

типа того. смотри, чтобы QTCPSocket умел получать и выдавать сообщения (сигналы), нужно, чтобы кто-то запустил цикл обработки сообщений. В Qt-приложении это делается в main:
Код

    QApplication a( argc, argv );
    MyWidget w;
    w.show();
    return a.exec(); // <- вот тут

в дульфёвом же приложении никто этот цикл не запускает, поэтому ты сам должен это сделать.

Автор: SanyaWanderer 24.12.2010, 11:10
Спасибо за пост!!!
Уже мозги сломал надо подобной проблемой, а теперь то все ясно!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)