トップ回答者
OLEデータのサイズ(ファイルに書き込まれるサイズ)がしりたい

質問
回答
-
一番簡単なのは、保存させる ar の作成を、HGLOBAL 上に行い(いろいろ段取りがあるので単純ではない)、それでサイズをチェックするですかね。
MFCの実装で、保存先のファイルが、フラットファイル(Structured Storageではないファイル)の場合に、HGLOBAL にストレージを用意して、そこに保存してから、それを丸ごと保存するという段取りがあります。
その部分を参考にすれば、必要になるファイルサイズの概算を計算することができると思います。ところで、なぜ計算が必要なのでしょう?
もしかしたら、計算しても意味がないかもしれませんよ?
一応OLEデータの保存のことについては、Compound Documents に載っています。ま、ファイルフォーマットとは違って実装も含めて乗ってるので余計なものがいっぱいに感じると思いますけど(MFCだと見えない部分でいろいろやってくれてるので余計に...)
とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/
- 回答としてマーク TAKAKUN 2013年11月12日 1:33
すべての返信
-
一番簡単なのは、保存させる ar の作成を、HGLOBAL 上に行い(いろいろ段取りがあるので単純ではない)、それでサイズをチェックするですかね。
MFCの実装で、保存先のファイルが、フラットファイル(Structured Storageではないファイル)の場合に、HGLOBAL にストレージを用意して、そこに保存してから、それを丸ごと保存するという段取りがあります。
その部分を参考にすれば、必要になるファイルサイズの概算を計算することができると思います。ところで、なぜ計算が必要なのでしょう?
もしかしたら、計算しても意味がないかもしれませんよ?
一応OLEデータの保存のことについては、Compound Documents に載っています。ま、ファイルフォーマットとは違って実装も含めて乗ってるので余計なものがいっぱいに感じると思いますけど(MFCだと見えない部分でいろいろやってくれてるので余計に...)
とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/
- 回答としてマーク TAKAKUN 2013年11月12日 1:33
-
-
OLEデータがシリアライズしている部分というのは、OleSave している個所ということですよね?
とすると、WriteItem() や、ReadItem() に細工することで飛ばすことができるかな?と思います。
解析の基本は、コードがある部分でまず何をやっているかをきちんと把握するところからです。
まずは、COleClientItem::Serialize や、COleDocument::OnOpenDocument/OnSaveDocument/Serialize が何をやっているかをきちんと把握するところから始めてみてはいかがでしょう?
そのうえで、必要なこと、クリアすべき問題点を洗い出してみるのが一番の近道だと思います。
みな、あえて言及を避けていますが、特殊なフォーマットの解析というのはそんなに単純なものではありませんよ(リファレンスがあっても、一日二日でどうにかなるようなものじゃないと思います)。
とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/