程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 《C# to IL》第一章 IL入門(2)

《C# to IL》第一章 IL入門(2)

編輯:關於C語言

現在不會生成任何錯誤了 。偽指令(directive)entrypoint表示程序執行必須開始於這個函數。在這個例子中,我們不得不使用 這個偽指令,雖然事實上這個程序只有一個函數。當在DOS提示符中給出dir命令後,我們看到有3個文件 會被創建。a.exe是一個可執行文件,現在可以執行它來看到程序的輸出。

C:\il>a

Exception occurred: System.BadImageFormatException: Exception from HRESULT: 0x8007000B. Failed to load C:\IL\A.EXE.

當我們試圖執行上面的程序時,我們的運氣似乎不太好,因為會生成上面的運行時錯誤。一個可能的 原因是,這個函數是不完整的,每個函數都應當具有一個“函數結束”指令在函數體中。我們 匆忙之中顯然沒有注意到這個事實。

a.il

.method void vijay()
{
      .entrypoint
      ret
}

“函數結束”指令被稱為ret。前面所有的函數都必須以這個指令作為結束。

Output

Exception occurred: System.BadImageFormatException: Exception from HRESULT: 0x8007000B. Failed to load C:\IL\A.EXE.

在執行這個程序時,我們再次得到了相同的錯誤。這次我們的問題又在哪裡呢?

a.il

.assembly mukhi {}
.method void vijay()
{
      .entrypoint
      ret
}

錯誤在於我們忘記在名稱後面使用必不可少的偽指令assembly。我們將其合成在上面的 代碼中,並在一對空的花括號之後使用了名稱mukhi。這個程序集偽指令用於給出程序的名稱。它又被稱 為一個部署單元。

上面的代碼是可以匯編而沒有任何錯誤的最小的程序,雖然它在執行時並沒有 做什麼有用的事情。它沒有任何名為Main的函數。它只有一個帶有entrypoint偽指令的函數vijay。現在 匯編這個程序並運行而根本不會有任何錯誤。

在.Net中,程序集的概念是極其重要的,應該對其 有徹底的認識。我們將在本章後半部分使用這個偽指令。

a.il

.assembly mukhi  {}
.method void vijay()
{
      .entrypoint
      ret
}
.method void vijay1()
{
      .entrypoint
      ret
}

Error

***** FAILURE *****

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved