私のwin32プログラムは、文字列[32]とその直後の整数のみを含むバイナリファイルを作成しました。次に、同じファイルを読み取るための.NETプログラムを作成しました。
これが私の.NETコードです:
method ReadUnitFile;
var
  FHeader:TFileHeader;
  Biread:BinaryReader;
  FUnitLoc:String;
begin
  FUnitLoc := baseDir+'\system\Units.dat';
  if Environment.OSVersion.Platform = System.PlatformID.Unix then
    FUnitLoc := baseDir+'/system/Units.dat';
  if File.Exists(FUnitLoc) then
  begin
    Biread:= new BinaryReader(File.OpenRead(FUnitLoc));
    FHeader.id:=Biread.ReadString;
    FHeader.version:=Biread.ReadInt32;
    Biread.Close;
  end;
end;
おそらくファイルの読み取りに失敗しました。実際、「ファイルの終わりを超えて読み取る」例外が発生しました。その理由は、文字列が正確に32文字の長さであるためです。BinaryReaderには情報がないと思います。したがって、文字列に対して32文字を超えて読み取ります。したがって、バイナリファイルを正しく読み取ることができません。
では、この場合、.NETFrameworkでbinary-win32-fileをどのように読み取るのでしょうか。
アップデート
これが私の.NET更新コードです:
method ReadUnitFile;
var
  FHeader:TFileHeader;
  Biread:BinaryReader;
  FUnitLoc:String;
  tmparray:array[0..32] of char;
begin
  FUnitLoc := baseDir+'\system\Units.dat';
  if Environment.OSVersion.Platform = System.PlatformID.Unix then
    FUnitLoc := baseDir+'/system/Units.dat';
  if File.Exists(FUnitLoc) then
  begin
    Biread:= new BinaryReader(File.OpenRead(FUnitLoc));
    Biread.Read(tmparray,0,32);
    FHeader.id := tmparray.ToString;
    FHeader.version:=Biread.ReadInt32;
    Biread.Close;
  end;
end;
これは機能しますが、tmparrayから文字列を取得できないようです。FHeader.idは文字列型です。ToStringが正しく機能していないようです。そのコード行の後、FHeader.idは「System.Char[]」と等しくなります。実際には文字列自体は含まれていません。
何か案が?
前もって感謝します、