0

CArchive (レガシー MFC アプリケーション) でファイルをエクスポート/保存しているように見えるレガシー アプリがあります。

現在、Web 用のツールをリファクタリングしています。これらのレガシー ファイルを解析およびロードするために、Ruby で参照できるライブラリはありますか?

どのようなライブラリを調べることができますか?

MFCの XML シリアライゼーションに従ったファイル形式には、次のような問題があります。これは、複雑で扱いにくいバージョン管理によって回避できます。XML を使用すると、これを大幅に回避できます。-プログラム オブジェクト モデルとアーカイブ データの間の依存関係が大きい。プログラム モデルを変更すると、以前のバージョンからデータを読み取ることはほとんど不可能です。-アーカイブされたデータは、関連するアプリケーションを除いて、編集、理解、および変更することはできません。

また、レガシー ソフトウェアには 4 つのバージョンが存在します。この ObjectModel、異なるバージョンのアーカイブ データの問題をどのように克服できますか? 総逆方向 (インポート) 機能が必要です。

4

2 に答える 2

2

CArchive には、解析できる形式がありません。単なるバイナリファイルです。読み方を知るには、その内容を知らなければなりません。CStringライブラリを使用すると、一部のデータ型 ( 、など)を読みやすくなる可能性がありCArrayますが、このようなものが見つかるかどうかはわかりません。

CArchive は次のように機能します (保存部分):

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

次に、これらすべてがバイナリ ファイルにダンプされます。バイナリ データを読み取って、何らかの方法で解釈する必要があります。CStringMFC は、やなどの複雑な型を含む型をシリアル化する方法を知っているため、C++ ではこれは簡単CArrayです。ただし、これは Ruby を使用して自分で行う必要があります。

たとえば、4 バイトを読み取り (それintが大きいことがわかっているため)、整数として解釈する場合があります。の次の 4 バイトfloat。次に、CString をロードする方法を確認する必要があります。最初に長さを格納し、次にデータを格納しますが、使用する正確な形式を確認する必要があります。作業を楽にするために各タイプのユーティリティ関数を作成できますが、これが単純であるとは思わないでください。

于 2010-04-08T10:37:10.090 に答える
1

古い機能を使用してC++でエクスポーターを作成できます。これは、CArchiveを読み取り、xmlファイルなどのコンテンツを出力します。Ruby (または C++/MFC 以外の言語) から直接 CArchives を読み取ることは、主要なプロジェクトになるでしょう。書き込まれるデータが数個の int または long を持つ単なる構造体である場合は、問題を回避できるかもしれませんが、CArchive に UDT が含まれるとすぐに、苦痛の世界に陥ります。たとえば、CArchive がアラインメントを約束しているとは思いません。

于 2010-04-09T13:13:27.730 に答える