我正在使用一个库,他们使用路径来定义输入和输出文件,在这些文件中读取/写入数据。
App1
写入输入文件,App2
读取该输入文件并创建输出文件。然后,App1
读取输出,每个人都很高兴。
现在,我们要求App1
和App2
之间的通信,不再创建任何文件。因此,App1
应将缓冲区传递给App2
(简单char*
)以及预先分配的输出缓冲区,其中App2
应将结果写入。
不幸的是,在App2
中使用的整个库中,FILE*
用于读取/写入。
所以,这就是问题:我可以实现 - 它不会重写App2使用的库 - (或稍作修改)我可以使用从App1
传递给{的缓冲区{1}}进行信息交换?恕我直言,这将要求我可以从缓冲区创建一个App2
而不在磁盘上有FILE*
。
我读到对于.NET我可以使用FILE*
类,但由于我使用普通的C ++而没有.NET,所以我不能使用那些东西。
额外奖金:
调用者(即System.IO.StringReader
)是托管代码(C#应用程序),被调用者(即App1
)是一个普通的C ++ DLL(即App2
调用该DLL中的函数)。
编辑:
我喜欢这样的答案:数据交换可以以调用者将缓冲区传递给被调用者的方式同步发生,被调用者从输入缓冲区读取并写入输出缓冲区,然后被调用者终止并且调用者可以读取内容缓冲区。
答案 0 :(得分:3)
对于IPC,您可以使用管道,可以从为管道创建的winapi FILE*
轻松创建HANDLE
。
此代码将显示如何:
HANDLE read_hnd;
HANDLE write_hnd;
//make sa (SECURITY_ATTRIBUTES)
if(!CreatePipe(&read_hnd, &write_hnd, &sa, NULL))
{
//error
}
int fd = _open_osfhandle((intptr_t)read_hnd, _O_RDONLY|_O_TEXT);
FILE *pipe_read_file = _fdopen(fd, "rt");
对于IPC,您应该使用命名管道,但想法相同。