- 浏览: 88816 次
- 性别:
- 来自: 北京
文章分类
操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点由连接程序设置,
不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是 mainCRTStartup,
mainCRTStartup 再调用main 函数;对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,
WinMainCRTStartup 调用你自己写的 WinMain 函数。具体设置哪个入口点是由连接器的“/subsystem:”
选项确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方式:CONSOLE|WINDOWS|NATIVE|POSIX。
如果这个选项参数的值为 WINDOWS,则表示该应用程序运行时不需要控制台,有关连接器参数选项的详细说明请参考 MSDN 库。
以下四种组合,可以实现console和windows模式的混合,可以达到不弹出DOS窗口的效果,
也可以达到在Windows程序中向控制台输出printf信息的目的。
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// ...
}
int main(void)
{
// ...
}
1,上面的意思就是如果你想弹出Dos窗口的话,就调用
#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )
这两个其中之一,具体哪个看你源代码的入口是main还是WinMain了。
如果你不想弹出Dos窗口的话,对exe调用可执行jar文件非常有用,就调用
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
这两个其中之一,具体还是看你源代码的入口是main还是WinMain了。
2,exe启动jar文件,模仿eclipse.exe文件
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#include <stdlib.h>
#include <Windows.h>
int main(){
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
TCHAR szCommandLine[] = TEXT("javaw -jar TT2012.jar");
CreateProcess(NULL, szCommandLine, NULL, NULL,
FALSE, 0, NULL, NULL, &si, &pi);
return EXIT_SUCCESS;
}
不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是 mainCRTStartup,
mainCRTStartup 再调用main 函数;对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,
WinMainCRTStartup 调用你自己写的 WinMain 函数。具体设置哪个入口点是由连接器的“/subsystem:”
选项确定的,它告诉操作系统如何运行编译生成的.EXE文件。可以指定四种方式:CONSOLE|WINDOWS|NATIVE|POSIX。
如果这个选项参数的值为 WINDOWS,则表示该应用程序运行时不需要控制台,有关连接器参数选项的详细说明请参考 MSDN 库。
以下四种组合,可以实现console和windows模式的混合,可以达到不弹出DOS窗口的效果,
也可以达到在Windows程序中向控制台输出printf信息的目的。
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// ...
}
int main(void)
{
// ...
}
1,上面的意思就是如果你想弹出Dos窗口的话,就调用
#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )
这两个其中之一,具体哪个看你源代码的入口是main还是WinMain了。
如果你不想弹出Dos窗口的话,对exe调用可执行jar文件非常有用,就调用
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
这两个其中之一,具体还是看你源代码的入口是main还是WinMain了。
2,exe启动jar文件,模仿eclipse.exe文件
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#include <stdlib.h>
#include <Windows.h>
int main(){
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
TCHAR szCommandLine[] = TEXT("javaw -jar TT2012.jar");
CreateProcess(NULL, szCommandLine, NULL, NULL,
FALSE, 0, NULL, NULL, &si, &pi);
return EXIT_SUCCESS;
}
发表评论
-
Java对象引用类型
2013-05-09 09:55 894Java对象的引用类型分为强引用、软引用、弱引用和虚应用 强引 ... -
JVM调优大纲
2013-05-07 19:07 1715我觉得处理JVM调优问题需要以下五个步骤: ... -
diango创建数据异常no module named base
2013-05-05 22:02 1544本人使用django创建web项目使用的数据库是sqlite3 ... -
hibernate根据hbm自动生成数据库
2013-04-27 10:26 1017今天碰到一个很老的项目,只有hbm文件没有数据库,想根 ... -
这几年收集的java相关资料
2013-04-06 14:46 614以下是我搜集的java相关资料,有需要的可以联系我,QQ470 ... -
很诡异的一个hibernate问题
2012-12-27 09:39 297在一个service里写了如下一段代码: List<Gr ... -
理解编译型编程语言心得
2012-11-01 14:11 7251,编译型语言,像c和c++都是,在源代码成为 ... -
Linux安装jdk详解
2012-10-22 16:34 7131,下载JDK,肯定官网下载,有多种类型,源码包、bin包、r ... -
(转)Linux设备命名规则
2012-10-19 15:21 1029在我们使用的计算机中 ... -
Windows编程之钩子程序
2012-10-15 09:20 20511,钩子(Hook),是Windows消息处理机制的一个平台, ... -
(转)编程竞赛的几个在线提交系统
2012-10-12 14:28 1008下面是几个比较大的在线提交系统(Online Judge)里面 ... -
从编程的角度理解操作系统及其软件设计
2012-10-11 10:58 900我们都知道操作系统是装在计算机上的,所有的计算 ... -
(转)世界上的操作系统认识
2012-10-10 10:41 68525款操作系统全面接触http://tech.163.com/ ... -
Linux系统的运行级别
2012-09-29 15:21 898Linux系统有7个运行级别(runlevel) 运行级别0: ... -
C语言各种编译器的清屏方法
2012-09-28 11:04 30561,vs/vc:vs本身并没有提供专用清屏的函数,但是清屏被作 ... -
C语言实现学生信息管理的增删改查
2012-09-28 10:42 5877刚开始,我用eclipse编写的,编译器使用的是gcc ... -
回车符和换行符的区别
2012-09-27 18:34 936回车符号和换行符号产生背景: 在计算机还没 ... -
C语言标准函数库IO处理分析
2012-09-26 16:25 891IO处理函数都在stdio.h头 ... -
C语言标准函数库动态内存分配和释放分析
2012-09-25 11:14 10551,动态内存分配需要程序员手动来释放获得的内存 2,内存分配和 ... -
C语言标准函数库产生随机数分析
2012-09-25 10:47 8581,是伪随机,不是真正的随机,伪随机的特点就是根据种子值+公式 ...
相关推荐
1.3.4 程序入口点 1.3.5 messagebox 函数 1.3.6 编译、链接和运行 第二章 unicode简介 2.1 字符集简史 . 2.1.1 美国标准 2.1.2 国际方面 2.1.3 扩展ascll 2.1.4 双字书字符集 2.1.5 ...
当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。 当您连结Windows程序以产生一个可执行文件时,您必须连结程序开发环境提供的特定「引用链接库...
1.3.1 字符模式 1.3.2 Windows对应程序 1.3.3 头文件 1.3.4 程序入口 1.3.5 MessageBox函数 1.3.6 编译、链接及运行 第2章Unicode简介 2.1 字符集简史 2.1.1 美国标准 2.1.2 美国以外的世界 2.1.3 扩展ASCII 2.1.4 ...
日记管理系统的报告掌握:创建窗口的过程;...• Windows程序入口函数是什么?和C中的main函数有什么区别? • 窗口创建的步骤是什么? • 每个步骤使用的API名称是什么? • 如何用代码C语言模拟消息处理?
近有幸拜读了Charles Petzold的大作《Windows程序设计》,真有种相见恨晚的感觉。这是一本1999年出版、主要讲述在Windows平台下如何使用C语言调用API函数进行软件开发的老书。在当今RAD工具充斥市场的今天,该书依然...
Windows程序:入口函数->设计窗口类->注册窗口类->创建窗口->显示窗口->更新窗口->消息循环
// 该调用是 Windows.Forms 组件设计器所必需的。 InitializeComponent(); // TODO: 在 InitComponent 调用后添加任何初始化 MainThread = new Thread(new ThreadStart(ThreadFunc)); MainThread.Priority = ...
Windows 2000可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。不同类型应用程序间的惟一重要...
(2) WinMain函数的使用(Win32下程序的入口) (3) 完成Windows窗口产生的四个步骤: A.设计窗口类,即WNDCLASS结构体的填充, 其中注意窗口 函数的指定和类名的命名 B.注册窗口类,即RegisterClass(…) 函数的使用 C....
调协系统管理告警(Administrative Alert) 向用户发送系统管理消息 远程关闭一台Windows NT计算机 使用Windows NT系统属性对话框 Windows NT诊断程序(Diagnostic)简介 使用Windows NT诊断程序打印一份报告 在Windows ...
实验三Windows系统设置及应用程序一.实验目的1.了解窗口的组成,熟练掌握窗口的...桌面上的[开始]按钮是运行Windows应用程序的入口,是执行程序常用的方式。Windows的主要功能都可以通过执行[开始]菜单提供的各项命令
1.3.2 在应用程序中使用虚拟内存 6 1.3.3 获取虚存状态 7 1.3.4 确定虚拟地址空间的状态 8 1.3.5 改变内存页面保护属性 9 1.3.6 进行一个进程的内存读写 10 1.4 文件的内存映射 11 1.4.1 内存映射API函数 11 ...
Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱 动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动程序 、虚拟串口驱动...
一个监控网络流量出入口大小的VB程序,这个程序可显示出发送的字节数、接收到的网络字节数,当前上传和下载速度,并支持在托盘处显示图标,可设置开机自动运行,启动后自动显示桌面窗口和主窗口,并可设置窗口置顶,...
NIC微端口驱动程序入口点和初始化 47 3.1 NDIS微端口驱动程序入口函数 47 3.1.1 初始化包裹 47 3.1.2 注册微端口 48 3.1.2.1 指定NDIS版本号 48 3.1.2.2 注册MiniportXxx函数 48 3.1.2.3 为中断...