我的代码目前使用的是我传递FILE *的库,它使用fread()CRT API读取一堆复杂的配置数据。我想将文件移动到文件中的嵌入式资源(Windows DLL)。不幸的是,读取Windows资源会直接将数据作为void * ....我无法传递给库。
我想要的是能够获得由内存缓冲区而不是磁盘上的文件支持的FILE *。 Windows有CreateStreamOnHGlobal(),但它使用IStream *,我需要一个文件*。不幸的是,我找不到适用于Windows的任何解决方案。 这可能吗?
我可以使用的解决方案是将资源数据写入临时文件,将临时文件传递给配置解析器,然后删除文件....但这是非常低效的,我是处理大量数据。
答案 0 :(得分:0)
您真正想要的是Windows上的fmemopen()
。没有这样的等价物。
您可以使用命名管道作为解决方法。您应该能够使用fopen()
打开命名管道的读取端。然后,资源提供程序将FILE *
传递给配置解析器,而其他一些线程将资源数据写入命名管道的写端。只要解析器只想对文件执行顺序读取(而不是搜索,这对管道不起作用),这应该没问题。
如果您愿意使用Cygwin,则会提供fmemopen()
。