【问题标题】:Read VB 6 binary file in C#在 C# 中读取 VB 6 二进制文件
【发布时间】:2014-12-09 17:01:46
【问题描述】:

我有一个由 VB6 应用程序编写的二进制文件,现在想使用 C# 应用程序读取 VB6 导出的二进制文件。我已经在我的 C# 项目中使用了 Microsoft.VisualBasic.dll。

然而,C# 应用程序中存在一些数据不一致,但我已在 VB.net 中对其进行了检查,并且效果也很好。 (我从 VB6 转换为 VB.net,然后将 VB.net 转换为 C#)

屏幕截图表示使用 C# 和 VB.Net 应用程序读取二进制文件的结果。 VB.Net 是我的预期结果,现在我的 C# 应用程序显示不一致的结果

在 C# 和 VB.NET 中都是双精度值,根据我的观察,int、string 值看起来都不错。

在 C# 中,我使用如下所示的语句,BinaryDetails 是结构体,里面有几个双变量

ValueType DetailsValueType = (ValueType)BinaryDetails;
FileSystem.FileOpen(FileNumber, FileName, OpenMode.Binary, OpenAccess.Read);
FileSystem.FileGet(FileNumber, ref DetailsValueType);

我已将 C# 中的数据类型从 double 更改为 float,但仍不是我的预期结果:

【问题讨论】:

  • 我迷路了 :( 恕我直言,这个问题需要更清楚。但甚至不确定要提出什么改进建议。对于初学者,这些屏幕截图要显示什么?
  • 截图代表使用C#和VB.Net应用程序读取二进制文件的结果。 VB.Net 是我的预期结果,现在我的 C# 应用程序显示不一致的结果
  • 你到底为什么要转换成 ValueType?
  • 您是否可以从文件中向您的问题添加一条记录?
  • 如果您可以发布您正在写入磁盘的结构的外观,那将非常有帮助。我想问题出在 VB 和 C# 编译相同的结构以具有不同的内存对齐方式。有关如何在 C# 中影响结构布局的更多信息,请参见:developerfusion.com/article/84519/mastering-structs-in-c

标签: c# vb.net vb6


【解决方案1】:

你可以用一个小测试程序对这种事故进行逆向工程:

class Program {
    static void Main(string[] args) {
        var value1 = 3.49563395756763E-310;
        var bytes1 = BitConverter.GetBytes(value1);
        Console.WriteLine(BitConverter.ToString(bytes1));
        var value2 = 101.325;
        var bytes2 = BitConverter.GetBytes(value2);
        Console.WriteLine(BitConverter.ToString(bytes2));
    }
}

输出:

CC-CC-CC-54-59-40-00-00
CD-CC-CC-CC-CC-54-59-40

请注意,您肯定是在正确的轨道上,您正在从文件中读取正确的字节值。这些双打有共同的 CC-54-59-40。只是您读取的数据未对齐。你开始阅读太晚了,减少了 2 个字节。

那是因为您的BinaryDetails 与文件中的数据不完全匹配。请记住,您必须假设文件包含 VB6 数据类型。它们与 C# 类型略有不同:

  • VB6文件数据密密麻麻,需要[StructLayout(LayoutKind.Sequential, Pack = 1)]
  • VB6 整数是 C# short
  • VB6 Long 是 C# int
  • VB6 布尔值是 C# short,其中 -1 = True,0 = False;
  • VB6 字符串有固定宽度,需要将其读取为 byte[]

应该足以解决问题。当然请记住,从 C# 程序中使用 VB.NET 程序集非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2011-09-03
    • 2016-01-15
    • 1970-01-01
    • 2012-04-29
    • 2012-07-08
    相关资源
    最近更新 更多