zoukankan      html  css  js  c++  java
  • windows工程总结

    1、win32控制台console程序

      运行在MS-DOS环境中的程序。控制台应用程序通常没有可视化的界面,只是通过字符串来显示或者监控程序。控制台程序常常被应用在测试、监控等用途,用户往往只关心数据,不在乎界面。

      生产.exe可执行程序。

      通过命令行实现输入输出交互,可直接使用printf,getchar等库函数。

      可直接使用win32 api接口。

      入口是int main(int argc, char* argv[])。

      main()中主要工作包括注册窗口类RegisterClass或RegisterClassEx,循环消息处理(取消息GetMessage,翻译消息TranslateMessage,派发消息DispatchMessage,消息处理WndProc(注册窗口类时会指定该函数来处理消息))。

      不需要创建窗口CreateWindow和显示窗口ShowWindow、UpdateWindow。

    2、win32窗口应用程序

      有独立的窗口实现交互。

      生产.exe可执行程序。

      可直接使用win32 api接口。

      入口是WinMain:

    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)

      WinMain()中主要工作包括注册窗口类RegisterClass或RegisterClassEx,创建窗口CreateWindow和显示窗口ShowWindow、UpdateWindow,循环消息处理(取消息GetMessage,翻译消息TranslateMessage,派发消息DispatchMessage,消息处理WndProc(注册窗口类时会指定该函数来处理消息))。

      注意:窗口应用程序也可以不用创建和显示窗口,这样就是一个无窗口的应用程序在运行。可通过资源管理器查询运行的进程。

    3、win32动态库程序

      生产.dll文件、

      可直接使用win32 api接口。

      跟exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。

      对于动态链接库,DllMain是一个可选的入口函数。)这句话很重要,很多初学者可能都认为一个动态链接库肯定要有DllMain函数。其实不然,像很多仅仅包含资源信息的DLL是没有DllMain函数的。

    BOOL WINAPI DllMain(
    _In_ HINSTANCE hinstDLL, // 指向自身的句柄
    _In_ DWORD fdwReason, // 调用原因
    _In_ LPVOID lpvReserved // 隐式加载和显式加载
    );

      系统是在什么时候调用DllMain函数的呢?静态链接时,或动态链接时调用LoadLibraryFreeLibrary都会调用DllMain函数。DllMain的第二个参数fdwReason指明了系统调用Dll的原因,它可能是::
    DLL_PROCESS_ATTACH、
    DLL_PROCESS_DETACH、
    DLL_THREAD_ATTACH、
    DLL_THREAD_DETACH。
      
      DllMain函数是DLL模块的默认入口点。当Windows加载DLL模块时调用这一函数。系统首先调用全局对象的构造函数,然后调用全局函数DLLMain。DLLMain函数不仅在将DLL链接加载到进程时被调用,在DLL模块与进程分离时(以及其它时候)也被调用。

    4、win32静态库程序

      生产.lib文件、

      可直接使用win32 api接口。

    5、MFC应用程序

      生产.exe文件

      可直接使用MFC封装后的接口,也可使用原生win32 api接口。

      需要MFC库文件支持。

    6、MFC动态库

      生产.dll文件

      可直接使用MFC封装后的接口,也可使用原生win32 api接口。

      需要MFC库文件支持。

  • 相关阅读:
    Linux防火墙命令
    Linux学习笔记:(三)软件包管理(更新中)
    Linux赋予root权限
    Linux学习笔记:(二)用户和组群账户管理
    Linux目录结构
    Sublime Text3中Package Control Install Package打不开问题
    Linux学习笔记:(一)常用命令大全
    SpringBoot项目中整合Mybatis框架
    IDEA快速创建springboot项目
    java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream 报错解决
  • 原文地址:https://www.cnblogs.com/ostin/p/9213191.html
Copyright © 2011-2022 走看看