JNI が「簡単」ではない場合は、IPC (プロセス間通信) メカニズムが必要です。したがって、C++ プロセスから Java プロセスと通信できます。
コンソールのリダイレクトで行っていることは、IPC の一種であり、本質的には IPC です。
あなたが送ろうとしているものの性質がはっきりしていないので、良い答えを出すのは非常に難しいです. しかし、単純なプロトコルに簡単にシリアル化できる「単純な」オブジェクトまたは「コマンド」がある場合は、 などの通信プロトコルを使用できますprotocol buffers
。
#include <iostream>
#include <boost/interprocess/file_mapping.hpp>
// Create an IPC enabled file
const int FileSize = 1000;
std::filebuf fbuf;
fbuf.open("cpp.out", std::ios_base::in | std::ios_base::out
| std::ios_base::trunc | std::ios_base::binary);
// Set the size
fbuf.pubseekoff(FileSize-1, std::ios_base::beg);
fbuf.sputc(0);
// use boost IPC to use the file as a memory mapped region
namespace ipc = boost::interprocess;
ipc::file_mapping out("cpp.out", ipc::read_write);
// Map the whole file with read-write permissions in this process
ipc::mapped_region region(out, ipc::read_write);
// Get the address of the mapped region
void * addr = region.get_address();
std::size_t size = region.get_size();
// Write to the memory 0x01
std::memset(addr, 0x01, size);
out.flush();
これで、Java ファイルは「cpp.out」を開いて、通常のファイルのように内容を読み取ることができます。