C 我可以得到一个由内存中已有数据支持的文件*吗?
我的代码目前使用一个库,我将一个文件*传递给它,它使用fread()crtapi读取一系列复杂的配置数据。我想将该文件移动到该文件内的嵌入式资源(Windows DLL)。不幸的是,读取Windows资源会直接将数据作为空*…传递给库 我希望能够得到一个由内存缓冲区支持的文件*,而不是磁盘上的文件。Windows有CreateStreamOnHGlobal(),但它使用的是IStream*,我需要一个文件*。不幸的是,我找不到任何适用于Windows的解决方案这可能吗?C 我可以得到一个由内存中已有数据支持的文件*吗?,c,windows,file,io,fread,C,Windows,File,Io,Fread,我的代码目前使用一个库,我将一个文件*传递给它,它使用fread()crtapi读取一系列复杂的配置数据。我想将该文件移动到该文件内的嵌入式资源(Windows DLL)。不幸的是,读取Windows资源会直接将数据作为空*…传递给库 我希望能够得到一个由内存缓冲区支持的文件*,而不是磁盘上的文件。Windows有CreateStreamOnHGlobal(),但它使用的是IStream*,我需要一个文件*。不幸的是,我找不到任何适用于Windows的解决方案这可能吗? 我可以使用的解决方案是将
我可以使用的解决方案是将资源数据写入一个临时文件,将临时文件传递给配置解析器,然后删除该文件……但这样做效率极低,而且我正在处理大量数据。您实际需要的是Windows上的等效数据。不存在这样的等价物 可以使用命名管道作为变通方法。您应该能够使用
fopen()
打开命名管道的读取端。然后,资源提供者将文件*
传递给配置解析器,而其他线程将资源数据写入命名管道的写入端。只要解析器只想对文件进行顺序读取(与查找相反,查找在管道上不起作用),这就可以了
如果您愿意使用,它会提供。我认为内存映射文件可能会提供您需要的内容。在Wikipedia或MSDN上签出。我需要与内存映射文件相反的文件。MMF让你像对待内存一样对待文件;我需要做的是把内存当作一个文件。谢谢你的建议,谢谢你的澄清。我希望您能找到改变库的动机,使用更合适的抽象来利用内存中的数据。谢谢。这是个好建议。痛苦……但这是个好主意。:-)我刚刚想出了一个更恶心的办法。将数据附加到DLL本身的末尾。使用
fopen()
将DLL作为常规文件打开,然后查找数据的开头,并将其传递到库中。