每个Windows程序都包含一个命名为WinMainwWinMain的入口点函数。这是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】相关推荐

  1. VC下提前注入进程的一些方法3——修改程序入口点

    前两节中介绍了通过远线程进行注入的方法.现在换一种方法--修改进程入口点.(转载请指明出处) 在PE文件中,其中有个字段标识程序入口点位置.我们通过这个字段,到达程序入口点.PE文件的结构我这儿不讨论 ...

  2. nvopencv64.dll找不到程序入口点

    nvopencv64.dll找不到程序入口点 问题描述: 使用opencv的dnn模块调用tensorflow训练好的模型报错,显示找不到程序入口关于nvopencv64.dll 解决方法: 更新nV ...

  3. 错误 LNK2001 无法解析的外部符号 _WinMain@16,VS程序入口点设置

    在开发VS项目的过程中,程序有两种模式Debug和Release,为了在Debug下为了方便调试,我在Debug模式下的设置选项为,如下图: 但是在项目刚创建好时,在Release下的设置选项也是这样 ...

  4. 脱壳:OEP(即程序入口点)查找 --- 基本思路和常见方法

    OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) 代表程序的入口点, POPAD (出栈) 代表程序的出口 ...

  5. C#创建WinForm应用程序的入口点

    在WinForm应用程序的开发设计中,一般会通过多窗体协调一致的处理具体业务流程.这种应用必须由程序员决定那个WinForm的窗体第一个被触发执行,在Windows Forms开发程序设计中由位于根目 ...

  6. 应用程序的主入口点应用程序的主入口点应用程序的主入口点

    /// <summary>         /// 应用程序的主入口点.         /// </summary>         [STAThread]         ...

  7. c程序怎么改为java程序_如何将Java程序的入口点更改为C签名?

    我在JNA试图在 Java程序中执行一些C代码时愚弄.这是我在网上找到的一个工作示例(构建路径中需要JNA): package core; import com.sun.jna.Library; im ...

  8. android程序的入口点,常见android面试基础题

    2015-11-21 06:30:02 阅读( 1344 ) 1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗 这里Android123提示大家,Intent的一些标记有 ...

  9. 程序定义了多个入口点。使用 /main (指定包含入口点的类型)进行编译

    原文:请使用/main进行编译,以指定包含入口点类型 在使用VS工具初学C#的时候需要不停的写小程序,觉得每次都新建项目太过麻烦,所以试着把程序写在一个项目下面,结果编译的时候出错了,因为我每个小程序 ...

最新文章

  1. 网页防止另存为,屏蔽右键,防止复制代码,防止被人frame等网页代码
  2. 二层交换配置完ping失败_设置完端口聚合之后就ping不通了!!!
  3. oracle 中时间类型 date 与 long 互转
  4. 提升效率的Vue组件开发和实战技巧
  5. Pytorch中CNN入门思想及实现
  6. MySQL - cast()函数
  7. 蛋壳公寓CEO高靖被限制消费
  8. SpringMVC+Spring Data JPA实现增删改查操作
  9. 私塾在线《研磨设计模式》,精品课程上线特大惊喜
  10. 硬盘根目录里的Msdia80.dll文件是干什么用的
  11. 阿里云存储OSS之九大使用技巧
  12. 区别: @Secured(), @PreAuthorize() 及 @RolesAllowed()
  13. tweenMax学习笔记
  14. 发现一个国外用来做参与式及知识迁移的网络课件 messenger-education
  15. 青花瓷音乐的单片机c语言程序,c语言曲谱_单片机c语言音乐简谱代码
  16. 《微观经济学》 第二章
  17. proguard 配置简介
  18. Arduino - RGB全彩LED模块
  19. 面试分享:17道Python面试题,让你在求职中无往不利
  20. 常见的八种典型知识变现场景

热门文章

  1. 什么是抽象工厂模式?
  2. 【测试工程师】关于软件测试的10条建议
  3. 大前端CPU优化技术--NEON intrinsics进阶
  4. Window server 2008 搭建FTP服务器
  5. SWFObject是什么
  6. 【10. 信号量和管程】
  7. nonnegative matrix factorization (NMF)的R实现
  8. 2020年Q3房产行业网络关注度分析报告
  9. 互联网行业的一些职位缩写
  10. Spring-工作原理