質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Chrome extension

Chrome拡張機能

Q&A

解決済

1回答

1790閲覧

Chrome拡張機能でNative Messagingを使用してのメッセージのやり取りがうまくいかない。

sera111

総合スコア17

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2019/06/22 11:34

編集2019/06/22 11:51

前提・実現したいこと

Native Messagingを使用してChromeの拡張機能とexeの間でメッセージのやり取りを実現したいのですが、Chromeからexeを起動し、コネクションを確立するところまでは出来たのですが、肝心のメッセージの送受信がうまくいきません。
コネクションの切断も動作しています。
しかしメッセージのやりとりだけが出来ません。

exeの方はVisual Studio 2017で、C/C++で作っています。
標準出力でメッセージの送信をするとあったのですが、printfでもcoutでもChromeはメッセージを受信してくれません。
エラーメッセージも出ません。

行き詰ってしまい私ひとりの力ではどうしても解決できそうにないので、どうすればメッセージのやり取りを実現できるか、どうかどなたか知恵をお貸下さい。

発生している問題・エラーメッセージ

exeの起動、コネクションの確立は出来るがメッセージのやり取りがうまくいかない。

該当のソースコード

C++

1int main(void){ 2 setBinaryMode(); 3 SendMessage(); 4} 5 6void setBinaryMode() { 7 _setmode(_fileno(stdin), _O_BINARY); 8 _setmode(_fileno(stdout), _O_BINARY); 9} 10 11void SendMessage(){ 12 printf("{\"message\":\"test\"}"); 13 14}

JavaScript

1//Chrome拡張機能のbackground.js 2 var port = chrome.runtime.connectNative("myApp"); 3 port.onDisconnect.addListener(function(){ 4 //これは出る 5 console.log("disconnected"); 6 }); 7 8 port.onMessage.addListener(function(msg){ 9 //ここが出ない 10 console.log(msg); 11 });

試したこと

標準出力をバイナリモードに変えるのは試しました。

補足情報(FW/ツールのバージョンなど)

Visual Studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

出力部を下記のように修正したところうまくいきました。
std::cout << message;
でうまくいかなかったのはバッファのflushをしてなかったからだと思います。
(おそらく明示的にflushしないとバッファにたまり続けている...。)

Native Messaging情報が少ないのでもし誰かのためになれば幸いです。

C++

1std::string message = "{\"message\":\"test\"}"; 2unsigned int length = message.length(); 3 4std::cout << char(length >> 0) 5 << char(length >> 8) 6 << char(length >> 16) 7 << char(length >> 24); 8std::cout << message << std::flush; 9

投稿2019/06/22 14:27

sera111

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問