Как использовать Native Host Message в родном приложении для расширения Chrome Native Messaging

Я работаю над расширением Chrome с сообщениями Native Host. Я не могу использовать текст сообщения в моем хост-приложении. Все работает нормально от установления соединения, чтобы получить ответ в расширении.
Мне нужно использовать текст сообщения в моем приложении для дальнейшего использования / выполнения в виде простого текстового типа (строка / символ). Я знаю, что сообщение в кодировке UTF8, которое я пытался декодировать, но проблема все еще возникает, может кто-нибудь мне помочь?

Когда я декодирую сообщение, в консоли расширения Chrome отображается сообщение об ошибке: «Ошибка связи с собственным узлом обмена сообщениями». и если я использую этот текст сообщения после «cout», то же сообщение об ошибке: «Ошибка связи с собственным хостом обмена сообщениями». Прямая отправка и получение сообщения прекрасно работает для меня.

Код выглядит примерно так:

 std::string mycode(std::string data){
data= data+"abc"; //changing text to any thing.
cout<< data;
anotherFunction(data);//killing processes using string data
}
int main(int argc, char* argv[])
{
std::cout.setf( std::ios_base::unitbuf );
while (true)
{
unsigned int ch, inMsgLen = 0, outMsgLen = 0;
std::string input = "", response = "";
std::cin.read((char*)&inMsgLen, 4);
if (inMsgLen == 0)
{
break;
}
else
{
for (int i=0; i < inMsgLen; i++)
{
ch = getchar();
input += ch;
}
}
response.append("{\"echo\":").append(input).append("}");
outMsgLen = response.length();
std::cout.write((char*)&outMsgLen, 4);
std::cout << response;
cout<< input;
//using "input" variable for further user
mycode(input);
}
return 0;
}

0

Решение

Это неправильно, вы читали документы?
Попробуйте что-то вроде этого …

_setmode( _fileno( stdin ), _O_BINARY );
_setmode( _fileno( stdout ), _O_BINARY );

char cBuffer[65536] = {0};
while(true)
{
unsigned int uiSize = 0;
std::cin.read((char*)&uiSize, sizeof(unsigned int));

if(uiSize != 0 && uiSize < 65536)
{
memset(cBuffer, 0, 65536);
std::cin.read(cBuffer, uiSize);

std::string strIn(cBuffer);

std::string strOut = "{\"result\":\"This is a Test\"}";
uiSize = strOut.length();

std::cout << char(((uiSize>>0) & 0xFF));
std::cout << char(((uiSize>>8) & 0xFF));
std::cout << char(((uiSize>>16) & 0xFF));
std::cout << char(((uiSize>>24) & 0xFF));
std::cout << strOut.c_str();
}
else
break;
}

Вы должны установить IO в двоичном формате, в противном случае такие вещи могут произойти …
если присутствует байт со значением 00011010 (CTRL ALT Z = 26), он будет обработан как EOF и завершит связь. 🙂

1

Другие решения