c #中如何制定程序的入口点

c #中如何制定程序的入口点,第1张

每个程序都需要一个入口点,即程序开始执行的地方。在C#中,入口点就是Main()方法。每个C#应吵核用程序必须至少定义一个Main()方法。定义多个Main()方法也是可以的,但必须使用/main编译选项指定哪个Main()方法是入口点。Main()方法在创建任何类或结构宴碰粗的实例前被调用,因此它必须声明为static。下面是Main()方法可以接受的方法签名。

public static void Main()

public static int Main()

public static void Main(string[] args)

public static int Main(string[] args)

最后两种形式用来向Main()方法传递命令行参数,任何参数都被作为string类型的数组传递。方法的返回类型必须是void或int返回值表示程序结束方式的晌镇约定,如返回值为0表示程序正常退出,非0的返回值表明程序出现了错误。

添加以下代码:

窗宽扰口程序:[STAThread]

static void Main()

{

Application.Run(new frmMain())//frmMain是察巧者你的主窗口

}

控制台程序:[STAThread]

static void Main(string[] args)

{ // TODO: 在此败薯处添加代码 }

从表面上来看:控制台程序运行时是在DOS环境下,或者模拟dos环境运行的程序,运行时一般会启动一个提示符窗口。

而应用程序是Windows环境下的窗口程序。运行时一般会启动一个窗口画面。(例外,病毒木脊春马,就不显示窗口,这决定于是否创建了窗口,或者是否让窗口显示)

但是,实质上,windows应用程序和控制台应用程序的真正区别是,PE文件的结构不同,这点不需要我们去关心,编译器会根据你的选择去构建生成的exe文件的PE结构。

如何告之编译器你的选择?在编译器进行连接的时候,给它一个连接参数:

subsystem:windows或者subsystem:console来告诉它。对于大多数编程工具来说一般在“工程->设置->连接”这个表单里面就可以看到这个参数。

但是通常在我们要创建一个新的工程的时候,编译器会让我们事先选择好是创建windows应用程序还是创建控制台应用程序。这个参数的设置就不用我们 *** 心了樱或耐。

补充(你可以不看,有点复杂了):事实上,控制台程序依然还有区别,那就是,16位的可以在DOS *** 作系统环境中运行的DOS程序(也可以在window运行通常windows会模拟一个dos环境,这时你会程序窗口与平时的提示符窗口明显不一样),和 32位通常只能在windows *** 作系统中运行的程序。通常32位控制台在DOS下运行,它的PE结构中会给予DOS环境下运行的一个入口点(DOS文件头),这个入口点只有“一行”代码:"This program cannot be run in DOS mode"

而在32位系统下,团亩 *** 作系统将将查看PE文件头里面的subsystem字段来获得程序将以什么方式运行(windoes或者console)这个字段里面指示了子系统(CUI对应控制台,GUI对应普通程序,驱动程序等没有子系统)32位的控制台程序当然可以调用PAI函数,而16位的DOS程序则不可以调用API函数。

再补充关于编译器的一点内容:通常大学里面学习C,c++时,最常用的是VC6.0

TC++3.0 和 TC2.0 VC6.0只能写32位程序。(也就是不能写Dos程序)

而TC++3.0 和 TC2.0这两个编译器是16位的编译器,不能写窗口程序(因为调用不了API(之所以调用不了,固然是编译器的限制,但实质是编译器根本不去使用32位寄存器))

那么,如何才能写一个即可以在DOS运行,又可以在windows下运行的程序(还要带窗口)?那就是要修改exe的PE文件结构,使用人工方法粘贴代码。复杂了,不说了......


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8265250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存