0

네이티브 호스트 메시징과 함께 Chrome 확장 기능을 연구 중입니다. 호스트 응용 프로그램에서 메시지 텍스트를 사용할 수 없습니다. 연장에 응답을 얻기 위해 연결을 설정하는 것부터 잘 작동하는 모든 것. 간단한 텍스트 데이터 유형 (문자열/char)에서 추가 사용/실행을 위해 응용 프로그램에서 메시지 텍스트를 사용해야합니다. 메시지가 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

메시지가 UTF8 인 것은 무엇을 의미합니까? 네이티브 메시징 호스트에 전달 된 메시지는 바이너리 모드이므로 stdin을 바이너리로 설정하고 처음 4 바이트를 읽은 다음 메시지의 크기를 확인한 다음 메시지를 읽어야합니다. –

+0

나는 메시지의 크기를 알기 위해 처음 4 바이트를 읽은 다음 똑같은 일을하고있다. 그러나 추가 사용을 위해 메시지 텍스트를 사용할 때 "네이티브 메시징 호스트와 통신 할 때 오류가 발생했습니다"오류를 표시하는 크롬 확장 로그가 표시됩니다. –

+0

당신의 커뮤니케이션 C++ 코드를 게시하십시오. –

답변

1

, 당신은 문서를 읽었다 :

코드는 다음과 같이인가? 값 00011010 (CTRL ALT Z = 26)와 바이트가있는 경우 당신은 ... 그렇지 않으면이 같은 일이 일어날 수, 바이너리의 IO를 설정해야 ...

_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; 
    } 

을 이런 식으로 뭔가를 시도 그것은 EOF로 취급되고 의사 소통을 종료합니다. :)