2011-04-04 52 views
0

我們正在考慮將Micro Focus Cobol.Net中的一些系統轉換爲C#。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); 
+2

同意Daniel Hilgarth - Reflector一定能夠顯示C#代碼,並且不會顯示C代碼。 – 2011-04-04 11:44:03

+0

這確實看起來很奇怪,但它可能是Cobol.net根據COBOL語言規範和內部Microfocus配方生成MSIL的方式。也許有一種方法可以將微焦點Cobol.NET MSIL生成微調爲更加人性化的東西? – Larry 2011-04-04 12:07:05

+0

是的,使用COBOL類和.Net類型(或類型有.Net equivilants).. 然後生成的代碼將幾乎與C#相同 – 2012-02-09 14:12:55

回答

3

您可以放心地假設您正在查看C#代碼,Reflector沒有C代碼轉換器。您不能假設Cobol編譯器正在生成C#代碼。它沒有這樣做的義務。它可以自由使用特定於編譯器的運行時程序集中定義的幫助函數。與Microsoft.CSharp.dll不同。

獲得使用C類名稱助手的代碼並非意料之外,C在很長一段時間內一直是隨處運行的語言。編譯器通常不是語言翻譯器,在這種情況下從Cobol轉到C,然後使用C編譯器生成特定於平臺的機器代碼。把C看作是以往的IL。

您肯定可以編譯並運行生成的C#代碼,請務必使用該特定於Cobol的程序集引用。您可能需要將其從GAC中挖掘出來。就開始獲得體面的C#代碼而言,幾乎沒有。語言之間的差異太大了。

1

在開一個反射NET的DLL肯定不顯示C代碼。它可能會顯示託管C++代碼,但只需在工具欄中的語言組合框中選擇C#即可更改。
考慮使用FileDisassembler add in,它允許從程序集中創建一個完整的項目。

+0

感謝您的答案,我選擇了C#,我已經更新問題與代碼示例 – 2011-04-04 11:49:18

+1

@Shiraz:哇,這肯定看起來很奇怪......當你點擊memcpy時會發生什麼?你能看到這種方法的內容嗎?它是否在你的組裝? – 2011-04-04 11:51:49