我有一个遗留应用程序,似乎是导出/保存文件与CArchive (遗留MFC应用程序)。
我们目前正在为网络重构这个工具。我是否可以在Ruby中查看一个库来解析和加载这些遗留文件?
我能查到哪些图书馆?
根据Non-robustness—your的说法,文件格式的问题包括:如果读取另一个版本的程序生成的存档文件,那么MFC的XML序列化程序可能会崩溃。这可以通过复杂和不灵活的版本管理来避免。通过使用XML,这在很大程度上可以避免。-程序对象模型与归档数据之间的高度依赖关系。更改程序模型,几乎不可能从以前的版本读取数据。-存档数据无法编辑、理解和更改,除非使用关联的应用程序。
另外-4个版本的遗留软件存在,我如何能够克服这个ObjectModel,存档的数据问题,为不同的版本?需要完全向后(导入)功能。
发布于 2010-04-08 02:37:10
CArchive没有您可以解析的格式。只是个二进制文件。你必须知道里面有什么才能知道怎么读。库可以使读取某些数据类型(CString
、CArray
等)变得更容易。但我不确定你能找到这样的东西。
CArchive的工作方式如下(存储部分):
CArchive ar;
int i = 5;
float f = 5.42f;
CString str("string");
ar << i << f << str;
然后将所有这些转储到二进制文件中。您必须读取二进制数据并以某种方式对其进行解释。这在C++中很容易,因为MFC知道如何序列化类型,包括CString
和CArray
这样的复杂类型。但是,您必须使用Ruby自己来完成这一任务。
例如,您可以读取4个字节(因为您知道int
有那么大)并将其解释为整数。接下来的四个字节用于float
。然后,您必须了解如何加载CString,它首先存储长度,然后存储数据,但您必须查看它使用的确切格式。您可以为每种类型创建实用程序函数,以使您的生活更轻松,但不要期望这是简单的。
发布于 2010-04-09 05:13:27
您可以使用旧的功能用C++编写导出程序,该功能将在CArchive中读取,然后输出一个xml文件或任何内容。直接从Ruby (或C++/MFC以外的任何语言)读取CArchives将是一个主要项目。如果所编写的数据只是一个带有几个in或long的结构,那么您就可以不使用它了,但是一旦您的CArchive包含了UDT,您就陷入了一个痛苦的世界。例如,我甚至不认为CArchive在对齐方面做出了承诺。
https://stackoverflow.com/questions/2599056
复制相似问题