C和x2B之间的交互/通信+;还有一个Java程序 我有一个用java编写的应用程序,还有一些带有系统钩子的C++代码。这两个人必须互相交流。我的意思是C++子程序必须向java发送一些数据。如果可能的话,我会用一种语言写下整件事。我现在所做的真的很傻,但很管用。我隐藏了C++程序的窗口并把它的数据发送到它的标准输出,然后我用java的标准输入读取输出!!!! 好的,我知道什么是JNI,但我正在寻找更简单的方法(如果有的话)
有人能告诉我怎么做吗 任何帮助都将不胜感激 Sockets&是我想到的两种技术C和x2B之间的交互/通信+;还有一个Java程序 我有一个用java编写的应用程序,还有一些带有系统钩子的C++代码。这两个人必须互相交流。我的意思是C++子程序必须向java发送一些数据。如果可能的话,我会用一种语言写下整件事。我现在所做的真的很傻,但很管用。我隐藏了C++程序的窗口并把它的数据发送到它的标准输出,然后我用java的标准输入读取输出!!!! 好的,我知道什么是JNI,但我正在寻找更简单的方法(如果有的话),java,c++,java-native-interface,native,interaction,Java,C++,Java Native Interface,Native,Interaction,有人能告诉我怎么做吗 任何帮助都将不胜感激 Sockets&是我想到的两种技术 另外,尝试或。从我的头顶开始两种方法: 1) 创建两个流程并使用任何合适的IPC < P > 2)将C++应用程序编译为动态库,并输出标准C接口的函数,这些语言可以从任何语言调用。 < P>如果您没有找到JNI’易’,则需要一个IPC(进程间通信)机制。因此,从C++进程中,你可以与java语言进行通信。 控制台重定向是IPC的一种形式,本质上就是IPC 因为你发送的内容的性质并不十分清楚,所以很难给你一个好的答案。
另外,尝试或。从我的头顶开始两种方法: 1) 创建两个流程并使用任何合适的IPC
< P > 2)将C++应用程序编译为动态库,并输出标准C接口的函数,这些语言可以从任何语言调用。 < P>如果您没有找到JNI’易’,则需要一个IPC(进程间通信)机制。因此,从C++进程中,你可以与java语言进行通信。 控制台重定向是IPC的一种形式,本质上就是IPC 因为你发送的内容的性质并不十分清楚,所以很难给你一个好的答案。但是,如果您有可以轻松序列化为简单协议的“简单”对象或“命令”,那么您可以使用通信协议,例如
协议缓冲区
#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();
#包括
#包括
//创建启用IPC的文件
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);
//设定大小
fbuf.pubseekoff(FileSize-1,std::ios_base::beg);
fbuf.sputc(0);
//使用boost IPC将文件用作内存映射区域
名称空间ipc=boost::进程间;
ipc::文件映射输出(“cpp.out”,ipc::读写);
//在此过程中使用读写权限映射整个文件
ipc::映射的_区域区域(out,ipc::读_写);
//获取映射区域的地址
void*addr=region.get_address();
std::size\u t size=region.get\u size();
//写入内存0x01
std::memset(地址,0x01,大小);
out.flush();
现在,您的java文件可以打开“cpp.out”并像普通文件一样读取内容。您有能力修改这两个程序吗?或者其中一个已经修复了?@templatetypedef,是的,我可以编辑这两个。它们都是我的。你可以在这里看到应用程序(mimer.sourceforge.net),它是2.0版的!!!