我可以得到一个文件*由已经在内存中的数据支持?

我的代码目前使用一个库,我传递一个文件*,它读取使用fread()CRT API一堆复杂的configuration数据。 我想移动文件成为文件(Windows DLL)中的embedded式资源。 不幸的是,阅读Windows资源给我的数据直接作为一个void * ….我不能传递给图书馆。

我想要的是能够得到一个FILE *,而不是一个文件在磁盘上的内存缓冲区支持。 Windows有CreateStreamOnHGlobal(),但是使用IStream *,我需要一个FILE *。 不幸的是,我找不到任何Windows的解决scheme。 这可能吗?

我可以使用的解决scheme是将资源数据写入临时文件,将临时文件传递给configurationparsing器,然后删除文件….但这是非常低效的,我正在处理大量的数据。

你真正想要的是相当于Windows上的fmemopen() 。 没有这种等同物存在。

您可以使用命名管道作为解决方法。 您应该可以使用fopen()来打开命名管道的读取结束。 然后,资源提供者将FILE *传递给配置解析器,而另一些线​​程将资源数据写入命名管道的写入端。 这应该没问题,只要解析器只想对文件进行顺序读取(而不是寻找,这在管道上不起作用)。

如果你愿意使用Cygwin ,它提供了fmemopen()