Russian Qt Forum

Qt => Общие вопросы => Тема начата: mozgofil от Май 02, 2009, 21:18



Название: запись в QProcess из dll
Отправлено: 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
помогите разобраться, плз.


Название: Re: запись в QProcess из dll
Отправлено: pastor от Май 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();
}

Также можно проанализировать возможные ошибки


Название: Re: запись в QProcess из dll
Отправлено: mozgofil от Май 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();
}