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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: запись в QProcess из dll  (Прочитано 2786 раз)
mozgofil
Гость
« : Май 02, 2009, 21:18 »

Имеется кусок кода, который хорошо работает из основной программы, но будучи
помещённым в функцию из dll перестаёт работать:
Код
C++ (Qt)
DLLEXPORT void StartProcess()
{
   proc.start("reader.exe");
   proc.waitForStarted();
   if(proc.open(QIODevice::WriteOnly))
   {
//        if(!proc.isWritable())
//            return;
       QTextStream strm(&proc);
       strm<<"Dll Connected!!!"<<endl;
       strm<<"Dll Connected!!!"<<endl;
       strm<<"Dll Connected!!!"<<endl;
   }
}
 
код запускает "reader.exe" и пишет в его stdin
помогите разобраться, плз.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Май 04, 2009, 21:27 »

Попробуй вызвать flush для QTextStream, т.е код будет выглядеть так:

Код
C++ (Qt)
DLLEXPORT void StartProcess()
{
   proc.start("reader.exe");
   if (!proc.waitForStarted()) return;
 
   if(proc.open(QIODevice::WriteOnly))
   {
//        if(!proc.isWritable())
//            return;
       QTextStream strm(&proc);
       strm<<"Dll Connected!!!"<<endl;
       strm<<"Dll Connected!!!"<<endl;
       strm<<"Dll Connected!!!"<<endl;
       strm.flush();
       proc.closeWriteChannel();
   }
   proc.waitForFinished();
}

Или же написать так:

Код
C++ (Qt)
DLLEXPORT void StartProcess()
{
   proc.start("reader.exe");
   if (!proc.waitForStarted()) return;
 
   proc.write("Dll Connected!!!");
   proc.write("Dll Connected!!!");
   proc.write("Dll Connected!!!");
   proc.closeWriteChannel();
 
   proc.waitForFinished();
}

Также можно проанализировать возможные ошибки
« Последнее редактирование: Май 04, 2009, 21:34 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
mozgofil
Гость
« Ответ #2 : Май 05, 2009, 20:31 »

вызов waitForFinished() даёт положительный результат,
всё остальное -не действует

Т.е. если использовать waitForBytesWritten()
то всё ОК
СПАСИБО БОЛЬШОЕ.
Код
C++ (Qt)
proc.start("reader.exe");
if(!proc.waitForStarted())
{
       proc.close();
               return;
       }
if(proc.open(QIODevice::WriteOnly))
{
QTextStream strm(&proc);
strm<<"Dll Connected!!!"<<endl;
strm<<"Dll Connected!!!"<<endl;
strm<<"Dll Connected!!!"<<endl;
proc.waitForBytesWritten();
}
 
« Последнее редактирование: Май 05, 2009, 20:54 от mozgofil » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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