在Ruby中解析CArchive(MFC类)文件

时间:2010-04-08 10:25:27

标签: ruby mfc libraries legacy

我有一个遗留应用,似乎是使用CArchive(传统MFC应用程序)导出/保存文件。

我们目前正在为网络重构该工具。我可以在Ruby中查看一个库来解析和加载这些遗留文件吗?

我可以研究哪些可能的库?

根据XML serialization for MFC的文件格式问题包括: 非健壮性 - 如果您阅读其他版本的程序生成的存档,您的程序可能会崩溃。复杂且难以管理的版本管理可以避免这种情况。通过使用XML,可以很大程度上避免这种情况。 - 程序对象模型与归档数据之间存在严重依赖关系。更改程序模型,几乎不可能从先前版本读取数据。 - 无法编辑,理解和更改已归档的数据,但关联的应用程序除外。

此外 - 存在4个版本的旧版软件,我如何能够克服不同版本的ObjectModel,Archived data问题?需要总的后向(导入)功能。

2 个答案:

答案 0 :(得分:2)

CArchive没有可以解析的格式。它只是一个二进制文件。你必须知道它是什么,知道如何阅读它。一个库可以让你更容易阅读一些数据类型(CStringCArray等)但我不确定你会发现这样的东西。

CArchive的工作原理如下(存储部分):

CArchive ar;
int i = 5;
float f = 5.42f;
CString str("string");
ar << i << f << str;

然后将所有这些转储到二进制文件中。您必须读取二进制数据并以某种方式解释它。这在C ++中很容易,因为MFC知道如何序列化类型,包括CStringCArray等复杂类型。但是你必须使用Ruby自己做这件事。

例如,您可能会读取4个字节(因为您知道int很大)并将其解释为整数。 float的下四个字节。然后你必须看看如何加载CString,它首先存储长度然后存储数据,但你必须看看它使用的确切格式。您可以为每种类型创建实用程序功能,以使您的生活更轻松,但不要指望这很简单。

答案 1 :(得分:1)

您可以使用旧功能在C ++中编写导出器,该功能将在CArchive中读取,然后输出xml文件或任何内容。直接从Ruby(或除C ++ / MFC之外的任何其他语言)读取CArchives将是一个重大项目。如果编写的数据只是一个具有少量整数或长整数的结构,也许你可以侥幸逃脱它,但只要你的CArchive包含UDT,你就会陷入痛苦的世界。例如,我甚至不认为CArchive在协调方面做出承诺。