Название: запись в 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(); }
|