我有一个Chrome扩展程序,它使用NativeHostMessaging
通过指向此文件的json文件启动可执行C ++文件。
此.exe文件尝试读取从扩展程序发送的邮件。首先,它读取描述长度的4个字节,然后读取等于length的字节数。这个文件的第一件事就是等待来自扩展的消息。
但是,可执行文件没有从扩展程序接收任何内容并继续等待。 STDIN(0)
上没有任何内容。
这是安全问题还是我做错了什么?我是否以错误的顺序读/写序列?
答案 0 :(得分:1)
以下是我对windows的看法:
#include "stdafx.h"
#include "json\json.h"
int _tmain(int argc, _TCHAR* argv[])
{
//save in a file so we know it was called
FILE *fh_debug; int errorcode;
errorcode =fopen_s(&fh_debug, "debug.txt","ab+");
std::string msg = "Host Called";
fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);
unsigned int uiSize = 0;
std::string inputStr;
//read the first four bytes (=> Length)
for (int i = 0; i < 4; i++)
{
int read_char = getchar();
uiSize += read_char * (int) pow(2.0, i * 8);
}
//for debug "0000" = 808464432
if ( uiSize == 808464432 ) {
uiSize = 0; inputStr = "{\"text\":\"tester\"}";
}
//debug record size
msg = std::to_string(uiSize);
fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);
//read the text
for (unsigned int i = 0; i < uiSize; i++)
{
inputStr += getchar();
}
//debug record json message
msg = inputStr;
fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);
//get the text
std::string theText;
Json::Value jsonRoot;
Json::Reader jsonReader;
bool OK = jsonReader.parse(inputStr, jsonRoot);
try {
theText = jsonRoot.get("text", "no text element").asString();
}
catch (std::exception& e)
{
std::cout << e.what() << '\n';
throw e;
}
//debug record json message
msg = theText;
fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);
std::string strOut = "{\"text\":\"Hello " + theText + "\"}";
uiSize = strOut.length();
msg = strOut;
fwrite( msg.c_str(), sizeof(char),msg.size(),fh_debug);
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();
return 0;
}
答案 1 :(得分:0)
此代码在OSx上适用于我
Input.GetMouseButton (0)