windows运行库合集(win10必备运行库)

Windows应用程序入口函数 GUI(GraphicalUserInterface)应用,链接器选项:/SUBSYSTEM:WINDOWS CUI(ConsoleUserInterface)应用,链接器选项:/SUBSYSTEM:CONSOLE _tWinMain与_tmain函数声明 IntWINAPI_tWinMain( HINSTANCEhInstanceExe, HINSTANCE, P…

Windows 应用程序入口函数

GUI(Graphical User Interface)运用,连接器选项:/SUBSYSTEM:WINDOWS

CUI(Console User Interface)运用,连接器选项:/SUBSYSTEM:CONSOLE

_tWinMain 与 _tmain 函数声明

Int WINAPI _tWinMain(
    HINSTANCE hInstanceExe,
    HINSTANCE,
    PTSTR pszCmdLine,
    int nCmdShow);

int _tmain(
    int argc,
    TCHAR *argv[],
    TCHAR *envp[]);
C  基础语法梳理:Windows 的动态链接库

Windows 的动态链接库(Dynamic-Link Library)

一部分知识要点来源于《Windows 核心编程(第五版)》

用途

(1)拓展了应用程序的特点

(2)简单化了项目风险管理

(3)有利于节约运行内存

(4)推动了自然资源的共享资源

(5)推动了本土化

(6)有利于处理服务平台间的差别

(7)可以用以独特目地

留意

(1)建立 DLL,实际上是在建立可供一个可实行控制模块读取的函数

(2)当一个控制模块给予一个内存分配函数(malloc、new)的情况下,它一定与此同时给予另一个内存优化函数(free、delete)

(3)在应用 C 和 C 混编的情况下,要应用 extern “C” 修饰符

(4)一个 DLL 可以导出来函数、自变量(防止导出来)、C 类(导出导进必须同c语言编译器,不然防止导出来)

(5)DLL 控制模块:cpp 文档中的 ._declspec(dllexport) 写在 include 库函数以前

(6)启用 DLL 的可实行控制模块:cpp 文档的 ._declspec(dllimport) 以前不应该界定 MYLIBAPI

载入 Windows 程序流程的检索次序

1、包括可执行程序的文件目录

2、Windows 的系统目录,可以根据 GetSystemDirectory 获得

3、16 位的系统目录,即 Windows 文件目录中的 System 根目录

4、Windows 文件目录,可以根据 GetWindowsDirectory 获得

5、过程的当前目录

6、PATH 系统变量中所列举的文件目录

DLL 入口函数

DllMain 函数

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch(fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        // 第一次将一个DLL投射到过程详细地址室内空间时启用
        // The DLL is being mapped into the process\' address space.
        break;
    case DLL_THREAD_ATTACH:
        // 当过程建立一个进程的情况下,用以告知DLL实行与进程有关的复位(非主线任务程实行)
        // A thread is bing created.
        break;
    case DLL_THREAD_DETACH:
        // 系统进程 ExitThread 进程撤出前,将要停止的进程根据告知DLL实行与进程有关的清除
        // A thread is exiting cleanly.
        break;
    case DLL_PROCESS_DETACH:
        // 将一个DLL从过程的详细地址室内空间时启用
        // The DLL is being unmapped from the process\' address space.
        break;
    }
    return (TRUE); // Used only for DLL_PROCESS_ATTACH
}

写入卸载掉库

LoadLibrary、LoadLibraryExA、LoadPackagedLibrary、FreeLibrary、FreeLibraryAndExitThread 函数声明

// 载进库
HMODULE WINAPI LoadLibrary(
  _In_ LPCTSTR lpFileName
);
HMODULE LoadLibraryExA(
  LPCSTR lpLibFileName,
  HANDLE hFile,
  DWORD  dwFlags
);
// 若想在通用性 Windows 服务平台(UWP)运用中载入 Win32 DLL,必须启用 LoadPackagedLibrary,而不是 LoadLibrary 或 LoadLibraryEx
HMODULE LoadPackagedLibrary(
  LPCWSTR lpwLibFileName,
  DWORD   Reserved
);

// 卸载掉库
BOOL WINAPI FreeLibrary(
  _In_ HMODULE hModule
);
// 卸载库和撤出进程
VOID WINAPI FreeLibraryAndExitThread(
  _In_ HMODULE hModule,
  _In_ DWORD   dwExitCode
);

表明地连接到导出来标记

GetProcAddress 函数声明

FARPROC GetProcAddress(
  HMODULE hInstDll,
  PCSTR pszSymbolName  // 只有接纳 ANSI 字符串数组,不可以是 Unicode
);

DumpBin.exe 查询 DLL 信息内容

在 VS 的开发者cmd 应用 DumpBin.exe 可查询 DLL 库的导出来段(导出的自变量、函数、类名的标记)、相对性虚拟注册地址(RVA,relative virtual address)。如:

LoadLibrary 与 FreeLibrary 流程表

LoadLibrary 与 FreeLibrary 流程图

LoadLibrary

C  基础语法梳理:Windows 的动态链接库

FreeLibrary

C  基础语法梳理:Windows 的动态链接库

DLL 库的撰写(导出来一个 DLL 控制模块)

DLL 库的撰写(导出来一个 DLL 控制模块) DLL 库函数

// MyLib.h

#ifdef MYLIBAPI

// MYLIBAPI 应当在所有 DLL 源代码的 include \"Mylib.h\" 以前被界定
// 所有函数/自变量已经被导出来

#else

// 这一库函数被一个exe源码控制模块包括,代表着所有函数/自变量被导进
#define MYLIBAPI extern \"C\" ._declspec(dllimport)

#endif

// 这儿界定一切的算法设计和符号

// 界定导出来的自变量(防止导出来自变量)
MYLIBAPI int g_nResult;

// 界定导出来函数原形
MYLIBAPI int Add(int nLeft, int nRight);

DLL 源代码

// MyLibFile1.cpp

// 包括规范Windows和C运作时库函数
#include <windows.h>

// DLL源代码文档导出来的函数和自变量
#define MYLIBAPI extern \"C\" ._declspec(dllexport)

// 包括导出来的算法设计、标记、函数、自变量
#include \"MyLib.h\"

// 将此DLL源码文档的编码放到这里
int g_nResult;

int Add(int nLeft, int nRight)
{
    g_nResult = nLeft   nRight;
    return g_nResult;
}

DLL 库的应用(运作时动态链接 DLL)

DLL 库的应用(运作时动态链接 DLL)

// A simple program that uses LoadLibrary and 
// GetProcAddress to access myPuts from Myputs.dll. 
#include <windows.h> 
#include <stdio.h> 
typedef int (._cdecl *MYPROC)(LPWSTR); 
int main( void ) 
{ 
    HINSTANCE hinstLib; 
    MYPROC ProcAdd; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 
    // Get a handle to the DLL module.
    hinstLib = LoadLibrary(TEXT(\"MyPuts.dll\")); 
    // If the handle is valid, try to get the function address.
    if (hinstLib != NULL) 
    { 
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, \"myPuts\"); 
        // If the function address is valid, call the function.
        if (NULL != ProcAdd) 
        {
            fRunTimeLinkSuccess = TRUE;
            (ProcAdd) (L\"Message sent to the DLL functionn\"); 
        }
        // Free the DLL module.
        fFreeResult = FreeLibrary(hinstLib); 
    } 

    // If unable to call the DLL function, use an alternative.
    if (! fRunTimeLinkSuccess) 
        printf(\"Message printed from executablen\"); 

    return 0;
}

运行库(Runtime Library)

典型性程序运行流程

(1)电脑操作系统建立过程,把决策权交到程序流程的入口(通常是运行库中的某一入口函数)

(2)入口函数对运行库和程序运行自然环境开展复位(包含堆、I/O、进程、全局变量结构这些)。

(3)入口函数复位后,启用 main 函数,正式开始程序执行行为主体一部分。

(4)main 函数实行结束后,回到到入口函数开展清洗工作中(包含全局变量析构、堆消毁、关掉I/O等),随后开展系统进程结束任务。

一个程序流程的 I/O 指代程序与外部的互动,包含文档、管程、互联网、命令、数据信号等。更理论地讲,I/O 指代电脑操作系统了解为 “文档” 的事情。

glibc 入口

_start -> ._libc_start_main -> exit -> _exit

在其中 main(argc, argv, ._environ) 函数在 __libc_start_main 里实行。

MSVC CRT 入口

int mainCRTStartup(void)

执行如下所示实际操作:

(1)复位和 OS 版本号相关的全局变量。

(2)复位堆。

(3)初始化 I/O。

(4)获得命令行参数和系统变量。

(5)复位 C 库的一些数据信息。

(6)启用 main 并纪录传参。

(7)查验问题并将 main 的传参回到。

C 语言表达运行库(CRT)

大概包括如下所示作用:

运行与撤出:包含入口函数及入口函数所依靠的别的函数等。

规范函数:有 C 语言表达标准的C语言标准库所具有的函数完成。

I/O:I/O 作用的封装形式和完成。

堆:堆的封装形式和完成。

语言表达完成:语言表达中一些独特作用的完成。

调节:完成调节作用的编码。

C语言标准库(ANSI C)

包括:

规范I/O(stdio.h)

文档实际操作(stdio.h)

标识符实际操作(ctype.h)

字符串数组实际操作(string.h)

数学课函数(math.h)

资源优化配置(stdlib.h)

格式转化(stdlib.h)

時间/日期(time.h)

结论(assert.h)

多种类型上的参量(limits.h & float.h)

拉长主要参数(stdarg.h)

非部分自动跳转(setjmp.h)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月10日 上午10:51
下一篇 2022年5月10日 上午10:53

相关推荐

  • 微信怎么导出聊天记录,微信文件批量导出教程

    微信出了新功能:聊天记录“不显示”。 渣男们第一时间更新,并隐藏了各种不堪入目的对话框。 有句话说得好,“好男人都是相似的,渣男却各有各的渣”。 今天兔姐就给大家揭露——渣男十大常见骚操作,希望各位姐妹擦亮眼睛! 林子大了,什么渣男都有。 但遇到渣男不可怕,可怕的是不能及时止损,任其继续伤害你。 所以,对待渣男的正确方式就是:果断说拜拜

    2022年6月30日
    550
  • 小米盒子电视直播软件哪个好用,电视盒子直播软件排行

    小米盒子是在4月30号到手的,以前都是用的台式机接到电视上点播电视,虽然有无线鼠标,不过也比较麻烦的,才有了买个盒子的念头。现在盒子太多了,也不知道哪款好,不过小米貌似是最先出盒子的吧,所以就买它了,从此一发不可收拾,爱上了小米的产品,先后买了手环、体重秤,下一步准备购入路由器和净化器,潜水多年,貌似净化器问题较多,味道极为酸爽。还有智能插座、智能灯泡也在考虑范围内。希望小米越做越好,现在很多人追…

    2022年6月12日
    1110
  • 2020华为笔记本测评对比(这款笔记本绝对是性价比最高的)

    由于之前的游戏本太重了,且工作原因需要转换到商务本,趁着6.18活动周期,在1号下单一台华为笔记本。 以下是我购买的笔记本参数: 笔记本:HUAWEIMateBook142020款(2K触控屏) CPU:i7-10510U 内存:16G 硬盘:512G(SSD) 显卡:独显MX350 这台华为笔记本之前配的显卡是MX250,最近升级到MX350,而且价格一样,庆幸之前忍住买,小赚了一个好点的显卡。…

    2022年9月19日
    580
  • 芒果tv怎么看直播,芒果tv观看直播具体操作流程

    湖南卫视2018小年夜晚会正在筹备中,广大的湖南卫视爱好者们下面我们来看看湖南卫视2018小年夜晚会在哪直播吧。 湖南卫视2018小年夜春晚在哪直播 直播时间:2018年小年夜晚上八点(2018年2月8日) 电视直播频道:湖南卫视独播 网络直播频道:芒果TV或其他网络直播湖南卫视直播信号 2018湖南卫视小年夜春晚部分嘉宾 2018湖南卫视小年夜春晚将由天天向上沈欣团体操刀,拟邀请嘉宾:李宇春、T…

    2022年6月29日
    2570
  • 淘宝刷人气软件哪个好(淘宝流量推广软件排名)

    1、闪佣补单平台 优点:可以选择买号的性别、地区、好评率、购物喜好、消费能力等,降权包赔付,再行业内算是顶尖的平台了,有专业的团队提供全方位服务,可以人工深度浏览,真实收藏加购,独立下单IP,自定义晒图好评,还能免费代发快递。   2、YY平台公会   优点,真实有效;缺点,效率低,价格高,一个要1.5元左右。   3、淘宝威客丶猪八戒威客   优点:真实有效;缺点,效率低,价格高,一个要1.5元…

    2022年5月9日
    740
  • 小区里摆地摊卖什么好,适合在小区长期摆摊生意

    很多人都想赚钱,其实摆地摊就是不错的选择,投资不大,只需要你有叫卖的勇气和销售的智慧,就能创造财富的奇迹,那么,摆地摊卖什么最赚钱呢?请看详细介绍。 摆地摊卖什么最火最好卖利润大? 自动播放机在小区或者公园,老年人多的放,卖自动播放机,生意那是杠杠的好,这种机器进价随便在网上一看就知道不会很高,但是售价都是最少七八十,100多的,老年人都很喜欢买一台这种机器放歌曲和戏剧。老花镜这种简直无敌了,进价…

    2022年8月18日
    1000
  • 如何判定兼职真假,三分钟教你学会鉴定兼职真假

    在这个社会上,商家为了钱经常做出一下伤天害理的事,不光滴滴事件,今天阿姨给大家介绍一下网上那些“黑兼职”是怎么骗那些年少无知的大学生的,大家一定要擦亮眼睛。 1 兼职骗局 兼职打字,千字20元骗局: 以免费不收费为幌子和你私聊,让你转发骗子的信息到10个群,转发完告诉你要交会费,你如果交了钱骗子把你拉黑,如果没有交钱,无形中你也成了骗子,帮骗子转发了10个群,等于帮助他们去骗了更多人。 现在科技已…

    2022年9月7日
    990
  • 拍大师怎么剪辑视频发快手(手机拍大师剪辑技巧)

    视频剪辑软件哪个好用短视频好用剪辑软件!使用视频剪辑软件,大家可以剪取自己需要的视频部分,从而制作出美丽的视频,让观众欣赏到最有价值的部分。工欲善其事,必先利其器。视频剪辑少不了。没有浑然天成的拍摄,只有用心良苦的剪辑。因此,我们制作视频的时候,也应该选好视频制作软件,这样才能保证视频后期特效达到想要的效果。   1、爱剪辑   爱剪辑是最易用、强大的视频剪辑软件,也是国内首款全能的免费视频剪辑软…

    2022年10月25日
    470
  • 自己创业做什么好,40个小本生意成功案例

    现在很多人都厌倦了上班的生活他们也想要自己创业。为别人打工不仅挣的钱比较少,而且工作量也比较大。2019年个人创业干点啥好呢?(推荐这四大行业)。比如电商行业、物流行业、餐饮行业和制造行业,这几个行业发展前景比较好,让投资者能够长久的经营下去。 电商行业:现在在市场上网购的人越来越多,可以在淘宝上开一个网店,这样不需要交纳房租,也不需要进太多的货源轻松就可以起步。想要投资电商行业对电脑一定要熟悉,…

    2022年7月11日
    560
  • 超链接怎么做,excel超链接教程

    Excel怎么做超链接?真是太简单了!现在excel表格的强大之处已经不言而喻,做超链接也成为家常便饭。Excel怎么做超链接,这个问题的解决方法有很多,但是简单快速且美观的的方法却不多,如果你想知道Excel超链接怎么做简单快速,在这里给大家介绍一种超级快速且美观的函数方法。 操作步骤 第一步、.打开Excel软件,这里给大家介绍两种快速启动Excel的方法。 1、在桌面建立Excel图片,双击…

    2022年5月25日
    680

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信