WinMain:应用程序入口点【WinMain: The Application Entry Point】
每个Windows程序都包含一个命名为WinMain或wWinMain的入口点函数。这是wWinMain的签名。
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
这四个参数是:
- hInstance是被称为“实例句柄”或“模块句柄”的东西。操作系统使用这个值来识别可执行文件(EXE),当它加载到内存中。某些Windows函数需要实例句柄——例如,加载图标或位图。
- hPrevInstance没有任何意义。它在16位窗口中使用,但现在总是零。
- pCmdLine以Unicode字符串的形式包含命令行参数。
- nCmdShow是一个标记,表示主应用程序窗口将被最小化、最大化或正常显示。
该函数返回一个int值。返回值不被操作系统使用,但是您可以使用返回值向您编写的其他程序传递状态代码。
WINAPI是调用约定。调用约定定义了函数如何从调用方接收参数。例如,它定义了参数在堆栈上出现的顺序。请确保像下面所示声明你的wWinMain函数。
WinMain函数与wWinMain相同,除了命令行参数是作为ANSI字符串传递的。Unicode版本优先。即使将程序编译为Unicode,也可以使用ANSI WinMain函数。要获取命令行参数的Unicode副本,请调用GetCommandLine函数。这个函数以一个字符串的形式返回所有参数。如果你想把参数作为一个argv风格的数组,把这个字符串传递给CommandLineToArgvW。
编译器如何知道调用wWinMain而不是标准的main函数?实际发生的是,微软C运行库(CRT)提供了一个调用WinMain或WinMain的main实现。
CRT在main中做一些额外的工作。例如,在wWinMain之前调用任何静态初始化器。虽然你可以告诉链接器使用不同的入口点函数,但是如果你链接到CRT,使用默认值。否则,会跳过CRT初始化代码,导致不可预知的结果。(例如,全局对象不会被正确初始化。)
这里是一个空的WinMain函数。
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR lpCmdLine, INT nCmdShow)
{return 0;
}
现在您已经了解了入门点并理解了一些基本的术语和编码约定,您就可以创建一个完整的窗口程序了。
WinMain:应用程序入口点【WinMain: The Application Entry Point】相关推荐
- VC下提前注入进程的一些方法3——修改程序入口点
前两节中介绍了通过远线程进行注入的方法.现在换一种方法--修改进程入口点.(转载请指明出处) 在PE文件中,其中有个字段标识程序入口点位置.我们通过这个字段,到达程序入口点.PE文件的结构我这儿不讨论 ...
- nvopencv64.dll找不到程序入口点
nvopencv64.dll找不到程序入口点 问题描述: 使用opencv的dnn模块调用tensorflow训练好的模型报错,显示找不到程序入口关于nvopencv64.dll 解决方法: 更新nV ...
- 错误 LNK2001 无法解析的外部符号 _WinMain@16,VS程序入口点设置
在开发VS项目的过程中,程序有两种模式Debug和Release,为了在Debug下为了方便调试,我在Debug模式下的设置选项为,如下图: 但是在项目刚创建好时,在Release下的设置选项也是这样 ...
- 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法
OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口 ...
- C#创建WinForm应用程序的入口点
在WinForm应用程序的开发设计中,一般会通过多窗体协调一致的处理具体业务流程.这种应用必须由程序员决定那个WinForm的窗体第一个被触发执行,在Windows Forms开发程序设计中由位于根目 ...
- 应用程序的主入口点应用程序的主入口点应用程序的主入口点
/// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] ...
- c程序怎么改为java程序_如何将Java程序的入口点更改为C签名?
我在JNA试图在 Java程序中执行一些C代码时愚弄.这是我在网上找到的一个工作示例(构建路径中需要JNA): package core; import com.sun.jna.Library; im ...
- android程序的入口点,常见android面试基础题
2015-11-21 06:30:02 阅读( 1344 ) 1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗 这里Android123提示大家,Intent的一些标记有 ...
- 程序定义了多个入口点。使用 /main (指定包含入口点的类型)进行编译
原文:请使用/main进行编译,以指定包含入口点类型 在使用VS工具初学C#的时候需要不停的写小程序,觉得每次都新建项目太过麻烦,所以试着把程序写在一个项目下面,结果编译的时候出错了,因为我每个小程序 ...
最新文章
- 网页防止另存为,屏蔽右键,防止复制代码,防止被人frame等网页代码
- 二层交换配置完ping失败_设置完端口聚合之后就ping不通了!!!
- oracle 中时间类型 date 与 long 互转
- 提升效率的Vue组件开发和实战技巧
- Pytorch中CNN入门思想及实现
- MySQL - cast()函数
- 蛋壳公寓CEO高靖被限制消费
- SpringMVC+Spring Data JPA实现增删改查操作
- 私塾在线《研磨设计模式》,精品课程上线特大惊喜
- 硬盘根目录里的Msdia80.dll文件是干什么用的
- 阿里云存储OSS之九大使用技巧
- 区别: @Secured(), @PreAuthorize() 及 @RolesAllowed()
- tweenMax学习笔记
- 发现一个国外用来做参与式及知识迁移的网络课件 messenger-education
- 青花瓷音乐的单片机c语言程序,c语言曲谱_单片机c语言音乐简谱代码
- 《微观经济学》 第二章
- proguard 配置简介
- Arduino - RGB全彩LED模块
- 面试分享:17道Python面试题,让你在求职中无往不利
- 常见的八种典型知识变现场景