static int Main返回值是谁?

时间:2014-12-22 07:03:42

标签: c#

我通过将void更改为int

编写了一个程序
class Program
{
    static int Main(string[] args)
    {
        return -1;
    }        
}

此值将返回给谁......是CLR吗?如果是这样,如何...因为被调用的函数可以向调用函数返回一个值。

如果这是被调用的函数,那么谁是调用函数..它是CLR吗? 它是如何发生的?

CLR是否会向某人返回任何值,例如OS?

2 个答案:

答案 0 :(得分:2)

如果编译这段代码,它将生成一个.exe程序。 这由操作系统调用。 当程序终止时,返回值将传递回操作系统。

您可以通过观察%ERRORLEVEL%

在批处理脚本(* .bat)中使用此返回值

如果您使用Process类从另一个.Net程序启动.exe,那么在.exe完成后,您将在Process.ExitCode中找到此返回值。

答案 1 :(得分:2)

  

如果这是被调用的函数,那么谁是调用函数..is   CLR?它是如何发生的?

Main方法调用CLR方法。这是多么幸福?

最初,windows会检查exe文件的标头,以确定是创建32位进程还是64位进程,还是创建WoW64进程。

然后Windows将x86,x64或IA64版本的MSCorEE.dll加载到进程的地址空间。

在此之后,进程的主线程调用MSCorEE.dll中定义的方法。此方法初始化CLR,加载exe程序集,然后调用其入口点方法Main

方法Main无法返回任何内容,voidint。如果我们选择返回int,那么通常我们选择在Main的末尾返回0,这意味着程序的执行成功。如果Main返回另一个否定int,那么我们就会出错。它们都是广泛使用的惯例。

话虽如此,很明显Main返回的值将返回到进程的主线程。

<强>更新

我们如何读取这个值?

我们可以构建一个将执行我们的可执行文件的批处理文件。 (我已将其命名为ExecutableName,您应该相应地更改它。)我们可以使用%ERRORLEVEL%读取Main返回的值。如果不为0,则屏幕上将显示带有相应错误值的消息Failed with error code

@echo off
ExecutableName.exe

IF NOT %ERRORLEVEL% == 0 goto error

echo OK
goto end

:error
echo Failed with error code %ERRORLEVEL%.

:end