农业资讯网
当前位置: 首页 农业百科

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

时间:2023-05-24 作者: 小编 阅读量: 2 栏目名: 农业百科

Windows应用程序入口函数GUI(GraphicalUserInterface)应用,链接器选项:/SUBSYSTEM:WINDOWSCUI(ConsoleUserInterface)应用,链接器选项:/SUBSYSTEM:CONSOLE_tWinMain与_tmain函数声明IntWINAPI_tWinMain(HINSTANCEhInstanceExe,HINSTANCE,PTSTRpsz

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[]);

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++ 类(导出导入需要同编译器,否则避免导出)

(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,DWORDdwFlags);// 若要在通用 Windows 平台(UWP)应用中加载 Win32 DLL,需要调用 LoadPackagedLibrary,而不是 LoadLibrary 或 LoadLibraryExHMODULE LoadPackagedLibrary(LPCWSTR lpwLibFileName,DWORDReserved);// 卸载库BOOL WINAPI FreeLibrary(_In_ HMODULE hModule);// 卸载库和退出线程VOID WINAPI FreeLibraryAndExitThread(_In_ HMODULE hModule,_In_ DWORDdwExitCode);

显示地链接到导出符号

GetProcAddress 函数声明

FARPROC GetProcAddress(HMODULE hInstDll,PCSTR pszSymbolName// 只能接受 ANSI 字符串,不能是 Unicode);

DumpBin.exe 查看 DLL 信息

在 VS 的开发人员命令提示符 使用 DumpBin.exe 可查看 DLL 库的导出段(导出的变量、函数、类名的符号)、相对虚拟地址(RVA,relative virtual address)。如:

LoadLibrary 与 FreeLibrary 流程图

LoadLibrary 与 FreeLibrary 流程图

LoadLibrary

FreeLibrary

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)

包含:

标准输入输出(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)

    推荐阅读
  • 我国的儿童感觉统合失调率为多少(儿童感觉统合失调的危害)

    大脑将这些讯息整合,作出反应再透过神经组织,指挥身体感官的动作,称为运动学习。平衡感是人类行动的基础平衡能力主要来自骨架和中枢神经的功能,并在中耳的半规管组成辨识神经体系,以协调身体和地心引力的能力。最重要是找出其根本的原因,由于孩子行为上大多已产生多重困难,不易判断真正原因及其不足程度。

  • 碱性水果有什么(碱性水果多吗)

    接下来我们就一起去了解一下吧!碱性水果有什么绝大多数水果都是偏碱性的,像香蕉,苹果,梨,葡萄,山楂,橘子,桃子。另外从中医角度这些水果又有不同的凉热属性,与中医上各人进行评估不同的属性相对应。但西医认为只要没有明显的胃肠道刺激情况这些水果都是可以选择。

  • 进出鹿泉区防疫政策(鹿泉区疫情防控要求)

    二、抵鹿后、早检测为及早筛查发现潜在疫情风险,请义乌、三亚等省外涉疫地区来鹿返鹿人员和7月30日以来有新乐市旅居史来鹿返鹿人员抵鹿后前3天每天进行免费核酸检测,并在第5天、第7天各进行一次免费核酸检测;倡导省外非涉疫地区来鹿返鹿人员抵鹿后前3天每天进行免费核酸检测,并提倡第5天再进行一次免费核酸检测,期间不参加聚集性活动,不前往人员密集场所,不乘坐公共交通工具,避免交叉感染风险。

  • 成年的猫咪能吃化毛膏吗(猫咪多大可以吃化毛膏)

    猫咪化毛膏一般是需要在猫咪开始学会舔毛的时候开始吃,通常是在三个月左右,它们会自己整理自己的毛发,从中舔入不少的猫毛,这就是毛球形成的主要因素。

  • 广东黑凉粉怎么做好吃(黑凉粉简单做法)

    下面更多详细答案一起来看看吧!广东黑凉粉怎么做好吃材料:准备好1盒凉粉粉,100克,水2300毫升,约正常碗9碗水。先取2碗冷水把凉粉粉开成无核的糊状,再用剩余的7碗冷水煮沸。把刚刚搅拌的糊状凉粉浆,慢慢到如煮沸的锅中,并不停的搅匀,直到煮沸。关火,充分冷凝后成固体,用木刀切成大四方快,放入冰箱冷藏。想吃的时候,取出,用木刀切入小方块,根据自己的口味加入蜂蜜或冰糖或蔗糖水,还可以加入自己喜欢吃的水果。

  • 月季花的特点,附外形介绍 月季花的样子和特点是什么

    顶部生长的小叶柄较长,侧面生长的小叶柄较短。北方花期是4-10月,南方花期是3-11月。

  • 齐白石画荷花图大全(齐白石画红荷卖690万)

    这幅《五色荷花》创作于1935年,在2017年以3220万的天价成交,足足比齐白石的《荷花蜻蜓》高出了近5倍。2,虽然同是写意荷花,齐白石的荷花重意趣,对形态的描写没有过多刻画,而张大千的荷花,除了荷叶之外,几乎每一朵荷花都刻画得更加细腻、美观一些。

  • 课后服务是什么意思(课后服务的解释)

    课后服务的解释课后服务属于学校教育的延伸,是为了解决放学早下班晚“时间差”问题而衍生的一种服务,以贝尔安亲为首的课后服务机构正迅速崛起,这种机构提供的学生托管、作业辅导、文体活动、娱乐游戏、兴趣培养、社会实践等服务。

  • 树藤怎么炒好吃(怎么炒树藤)

    我们一起去了解并探讨一下这个问题吧!树藤怎么炒好吃藤藤菜300g,蚝油1勺,干辣椒3个,蒜2瓣,食盐3g,植物油30g,将藤藤菜用水浸泡30分钟,然后择叶,洗净,沥干。将蒜去衣,切蒂,切成蒜片,干辣椒切成细丝。放入蒜片、辣椒丝爆香。快炒至熟,下适量食盐和蚝油调味,即可关火上碟。

  • 二手三门版普拉多转让(司法拍卖不容错过)

    司法拍卖不容错过江津法院司法拍卖拍品上新啦!1.登录淘宝网司法拍卖网络平台http://sf.taobao.com2.扫码拍品下的二维码即可进入拍卖界面还在等什么呢?本周有什么新拍品,赶紧来看看吧!1拍卖标的:重庆市。