代码之家  ›  专栏  ›  技术社区  ›  EarlyPoster

用ruby解析carchive(mfc类)文件

  •  0
  • EarlyPoster  · 技术社区  · 14 年前

    我有一个遗留应用程序,它似乎正在用carchive(遗留mfc应用程序)导出/保存文件。

    我们目前正在重构网络工具。在ruby中有没有一个库可以用来解析和加载这些遗留文件?

    我可以查哪些图书馆?

    根据 XML serialization for MFC 包括: 非稳健性 如果您读取由程序的另一个版本生成的存档文件,则程序可能会崩溃。这可以通过复杂而笨拙的版本管理来避免。通过使用xml,这在很大程度上可以避免。 - 程序对象模型和存档数据之间的严重依赖关系 . 更改程序模型,几乎不可能读取以前版本的数据。 - 存档数据无法编辑 ,已理解并已更改,但与关联的应用程序无关。

    还有-4个版本的遗留软件存在,我如何才能克服这个对象模型,不同版本的存档数据问题?需要全部向后(导入)功能。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Nikola Smiljanić    14 年前

    Carchive没有可以解析的格式。它只是一个二进制文件。你必须知道里面有什么才能知道怎么读。库可以使读取某些数据类型更容易( CString , CArray 但我不确定你会找到这样的东西。

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

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

    然后所有这些都被转储到二进制文件中。你必须读取二进制数据并以某种方式解释它。这在C++中很容易,因为MFC知道如何序列化类型,包括复杂类型 字符串 动态数组 . 但是你必须自己用ruby来做。

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

        2
  •  1
  •   Roel    14 年前

    您可以使用C++来编写一个出口商,它将在CARCHIVE中读取,然后输出XML文件或内容的任何内容。直接从Ruby(或任何其他语言比C++/MFC)阅读CARCHIVE将是一个重要的项目。如果所写的数据只是一个只有几个int或long的结构,也许你可以摆脱它,但是一旦你的carchive包含udt,你就会陷入痛苦的世界。比如说,我甚至不认为卡奇夫会承诺结盟。