現在不會生成任何錯誤了 。偽指令(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 *****