0

我有一个旧版应用程序,它似乎正在使用 CArchive(旧版 MFC 应用程序)导出/保存文件。

我们目前正在重构 Web 工具。我可以在 Ruby 中查看用于解析和加载这些遗留文件的库吗?

我可以查看哪些可能的库?

根据MFC 的 XML 序列化,文件格式的问题包括: 非鲁棒性- 如果您读取由另一个版本的程序生成的存档,您的程序可能会崩溃。这可以通过复杂且笨拙的版本管理来避免。通过使用 XML,可以在很大程度上避免这种情况。-程序对象模型和存档数据之间的严重依赖关系。更改程序模型,几乎不可能从以前的版本中读取数据。-存档数据无法编辑、理解和更改,除非使用相关应用程序。

另外 - 存在 4 个旧版软件版本,我将如何克服这个 ObjectModel,不同版本的存档数据问题?需要总后向(导入)能力。

4

2 回答 2

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,它首先存储长度,然后存储数据,但你必须看看它使用的确切格式。您可以为每种类型创建实用程序函数以使您的生活更轻松,但不要期望这很简单。

于 2010-04-08T10:37:10.090 回答
1

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

于 2010-04-09T13:13:27.730 回答