从String创建FILE *

时间:2011-08-01 13:01:10

标签: c++ winapi

我正在使用一个库,他们使用路径来定义输入和输出文件,在这些文件中读取/写入数据。

App1写入输入文件,App2读取该输入文件并创建输出文件。然后,App1读取输出,每个人都很高兴。

现在,我们要求App1App2之间的通信,不再创建任何文件。因此,App1应将缓冲区传递给App2(简单char*)以及预先分配的输出缓冲区,其中App2应将结果写入。

不幸的是,在App2中使用的整个库中,FILE*用于读取/写入。

所以,这就是问题:我可以实现 - 它不会重写App2使用的库 - (或稍作修改)我可以使用从App1传递给{的缓冲区{1}}进行信息交换?恕我直言,这将要求我可以从缓冲区创建一个App2而不在磁盘上有FILE*

我读到对于.NET我可以使用FILE*类,但由于我使用普通的C ++而没有.NET,所以我不能使用那些东西。


额外奖金:
调用者(即System.IO.StringReader)是托管代码(C#应用程序),被调用者(即App1)是一个普通的C ++ DLL(即App2调用该DLL中的函数)。


编辑:
我喜欢这样的答案:数据交换可以以调用者将缓冲区传递给被调用者的方式同步发生,被调用者从输入缓冲区读取并写入输出缓冲区,然后被调用者终止并且调用者可以读取内容缓冲区。

1 个答案:

答案 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,您应该使用命名管道,但想法相同。