バイナリファイルデータ読込みを.NETに移行する有効手段を教えてください。
VB6で作成したシステムでは、
バイナリファイルからデータを読み込むのをDLLで行っていました。
利点が三つあります。
一つ目に、エンディアン変換が必要で、その処理がDLLで行う方が早い。
二つ目に、データの型が、4バイトのロングとシングルのみなので、構造体であろうと配列であろうと、先頭のアドレスと長さに従い、C側では、VB側のデータ構造を意識せず単純にエンディアン変換処理するのみ。
三つ目に、VB側では、先頭のアドレスと長さを指定して、DLLコールするのみで、適切な処理(構造体へのデータ入力処理等)をする必要がない。
のです。
構造体の種類、読込み処理が多いので、.NET移行時に、
データの持ち方や読み込み処理の変更を極力避けたいと思っています。
取得したい先頭アドレスと、長さのみで、バイナリファイルデータを読み込むのが、目的です。
何かいい方法はないでしょうか。
.NETでもDLLを使ってみたら
いいと思います。
> バイナリファイルデータ読込みを.NETに移行する有効手段を教えてください。
ケースバイケースだと思います.
> その処理がDLLで行う方が早い。
パフォーマンスの問題であれば, まずは.NETだけでそのまま実装して,それが,VB6+DLLの場合とどの程度の差になるのかを検証しておいた方が良いと思います.
変換で使えそうなのは, System.Array.Reverse, System.BitConverter, System.IO.BinaryWriter/BinaryReaderなど?
バイナリの受け渡しだけなら,DLL呼び出しでの変換でも良いでしょうけれど,構造体の受け渡しがあるなら,マーシャリングのために,System.Runtime.InteropServices.Marshal.PtrToStructureあたりが使えるような構造体実装にする必要がある(と思う)ので,仕組みが大掛かりになってしまうかも.
受け渡しデータは構造体がほとんどで、
メンバの中に自作構造体があり、単純ではありません。
マーシャリングは大掛かりになりそうなのと、
自作メンバがある場合は、うまくいかないようなので、
行き詰っています。
.NETは構造体エリアをどのように管理しているのか?その管理方法を利用して、DLL側で対処できないか?とも考えているのですが、
適切な方法が分かりません。
複雑な構造体データをdllとやりとりしている実績があれば教えて頂きたいです。
ツイート | ![]() |