• 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库文件支持。

  • 相关阅读:
    bash帮助文档简单学习;bash手册翻译
    jmeter的master、slave模型启动方法
    如何查看pip安装包的所有版本;以及ipython的安装
    简单过下bash/sh脚本基本知识吧
    Celery 启动报错 can_read() got an unexpected keyword argument timeout
    paramiko执行命令超时的问题
    远程的jmeter自动执行完,如何回调通知被调用者“结束”状态
    记录一下:关于mysql数据误删除恢复的问题
    数据库Sharding的基本思想和切分策略
    数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
  • 原文地址:https://www.cnblogs.com/ostin/p/9213191.html
Copyright © 2020-2023  润新知