1

我们在 Micro Focus Cobol.Net 中有一些系统,我们正在考虑将其转换为 C#。

我们已经尝试在反射器中打开 dll,但是我们只得到了 C 代码。

任何人都有如何做到这一点的建议?

当我在反射器中选择 C# 时,我得到如下代码:

        meminit(&(this._MF_OSBLOCK[0]), 0x20, 4);
        this._MF_OSBLOCK[4] = 0x30;
        this._MF_OSBLOCK[5] = 0x30;
        this._MF_OSBLOCK[6] = 0x30;
        this._MF_OSBLOCK[7] = 0x30;
        meminit(&(this._MF_OSBLOCK[8]), 0x20, 30);
        memcpy(&(this._MF_OSBLOCK[0x26]), &(_MF_LITBLOCK[0]), 2);
        int num2 = 0;
        do
        {
            memcpy(&(this._MF_OSBLOCK[40 + num2]), &(_MF_LITBLOCK[0]), 2);
        }
        while ((num2 += 2) < 0xc6);
        memcpy(&(this._MF_OSBLOCK[240]), &(_MF_LITBLOCK[2]), 4);
4

2 回答 2

4

您可以放心地假设您正在查看 C# 代码,Reflector 没有 C 代码转换器。您不能假设 Cobol 编译器正在生成健全的 C# 代码。它没有义务这样做。它可以自由地使用在特定于编译器的运行时程序集中定义的辅助函数。与 Microsoft.CSharp.dll 不同。

获得使用类似 C 名称的助手的代码并不意外,C 长期以来一直是随处运行的语言。编译器经常是语言翻译器,在这种情况下从 Cobol 到 C,然后使用 C 编译器生成特定于平台的机器代码。将 C 视为过去的 IL。

您肯定可以编译并运行生成的 C# 代码,请务必使用该 Cobol 特定的程序集引用。您可能必须从 GAC 中挖掘它。就开始获得体面的 C# 代码而言,几乎没有。语言之间的差异太大了。

于 2011-04-04T12:14:45.683 回答
1

在 Reflector 中打开 .NET dll 肯定不会显示 C 代码。它可能会显示托管 C++ 代码,但只需在工具栏中的语言组合框中选择 C# 即可更改。
考虑使用FileDisassembler 插件,它允许从程序集创建一个完整的项目。

于 2011-04-04T11:42:39.753 回答