Привет!
Есть одна программа-интерфейс к другой программе-ядру. Ядро - консольное приложение, которое запускается с определёнными параметрами и выполняет весь функционал. Как организовать двухстороннюю передачу данных? Стандартные потоки передают текстовую информацию с искажениями. Загружая например html-файл в unicode, из ядра передаётся интерфейсу двухбайтовая html'ка полностью, то есть браузер уже не может правильно отображать полученные данные.
Частичный код интерфейс:
C++ (Qt)
void Window::slotDataOnStdOut()
{
QByteArray baTemp;
QString sTemp;
baTemp = proc1.readAllStandardOutput();
sTemp = baTemp;
ui->textEdit->setHtml(sTemp);
}
}
Ядро:
C++ (Qt)
#include <QCoreApplication>
#include <QFile>
#include <QIODevice>
#include <QTextStream>
#include <iostream>
#include "commandconst.h"
using namespace std;
int main(int argc, char *argv[])
{
// QTextStream cout(stdout);
// QTextStream cin(stdin);
QString sTemp;
bool bOk;
// cout.setCodec("UTF-8");
// cin.setCodec("UTF-8");
QCoreApplication a(argc, argv);
if (argc > 1)
{
cout << "Hello World!" << endl;
}
unsigned short uInputCommand;
while (cin >> uInputCommand)
{
// cin >> sTemp;
// uInputCommand = sTemp.toInt(&bOk, 10);
switch (uInputCommand)
{
case EXIT_PROGRAM:
cout << "Succesfully closed / Óñïåøíî çàêðûòî";
return 0;
case LOAD_FILE:
QFile fHtmlFile("index.html");
QString sText;
if (!fHtmlFile.open(QIODevice::ReadOnly)) {
cout << "Cannot open file for reading: ";
}
QTextStream tsHtmlFile(&fHtmlFile);
tsHtmlFile.setCodec("UTF-8");
sText = tsHtmlFile.readAll();
// for (int i = 0; i < baText.count() - 1; i++)
// cout << baText.at(i);
// QByteArray baText;
// baText.append(sText);
// baText = baText.toBase64();
// sText = baText;
cout << sText;
fHtmlFile.close();
}
}
return a.exec();
}
Пробовал так QTextStream cout(stdout); и сжимать и кодировать в Base64 всё равно данные искажаются.
Можно ли такой обмен настроить или использовать QSharedMemory?
Благодарю за ответы!