Если вы не находите 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 'и прочитайте содержимое как обычный файл.