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

  • 生活
  • 2023-04-26 17:10

多条告白如次剧本只需引入一次

Windows运用步调进口因变量

GUI(GraphicalUserInterface)运用,链接器选项:/SUBSYSTEM:WINDOWS

CUI(ConsoleUserInterface)运用,链接器选项:/SUBSYSTEM:CONSOLE

_tWinMain与_tmain因变量证明

IntWINAPI_tWinMain(HINSTANCEhInstanceExe,HINSTANCE,PTSTRpszCmdLine,intnCmdShow);int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]);Windows的动静链接库(Dynamic-LinkLibrary)

局部常识点来自《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因变量

BOOLWINAPIDllMain(HINSTANCEhinstDLL,DWORDfdwReason,LPVOIDlpvReserved){switch(fdwReason){caseDLL_PROCESS_ATTACH://第一次将一个DLL映照到过程地方空间时挪用//TheDLLisbeingmappedintotheprocess'addressspace.break;caseDLL_THREAD_ATTACH://当过程创造一个线程的功夫,用来报告DLL实行与线程关系的初始化(非干线程实行)//Athreadisbingcreated.break;caseDLL_THREAD_DETACH://体例挪用ExitThread线程退出前,行将中断的线程经过报告DLL实行与线程关系的整理//Athreadisexitingcleanly.break;caseDLL_PROCESS_DETACH://将一个DLL从过程的地方空间时挪用//TheDLLisbeingunmappedfromtheprocess'addressspace.break;}return(TRUE);//UsedonlyforDLL_PROCESS_ATTACH}载入卸载库

LoadLibrary、LoadLibraryExA、LoadPackagedLibrary、FreeLibrary、FreeLibraryAndExitThread因变量证明

//载入库HMODULEWINAPILoadLibrary(_In_LPCTSTRlpFileName);HMODULELoadLibraryExA(LPCSTRlpLibFileName,HANDLEhFile,DWORDdwFlags);//若要在通用Windows平台(UWP)运用中加载Win32DLL,须要挪用LoadPackagedLibrary,而不是LoadLibrary或LoadLibraryExHMODULELoadPackagedLibrary(LPCWSTRlpwLibFileName,DWORDReserved);//卸载库BOOLWINAPIFreeLibrary(_In_HMODULEhModule);//卸载库和退出线程VOIDWINAPIFreeLibraryAndExitThread(_In_HMODULEhModule,_In_DWORDdwExitCode);表露地链接到导出标记

GetProcAddress因变量证明

FARPROCGetProcAddress(HMODULEhInstDll,PCSTRpszSymbolName//只能接收ANSI字符串,不许是Unicode);DumpBin.exe察看DLL消息

在VS的开拓职员吩咐提醒符运用DumpBin.exe可察看DLL库的导出段(导出的变量、因变量、类名的标记)、对立假造地方(RVA,relativevirtualaddress)。如:

LoadLibrary与FreeLibrary过程图

LoadLibrary与FreeLibrary过程图

LoadLibrary

FreeLibrary

DLL库的编写(导出一个DLL模块)

DLL库的编写(导出一个DLL模块)DLL头文献

//MyLib.h#ifdefMYLIBAPI//MYLIBAPI该当在十足DLL源文献的include"Mylib.h"之前被设置//十足因变量/变量正在被导出#else//这个儿文献被一个exe源代码模块包括,表示着十足因变量/变量被导出#defineMYLIBAPIextern"C"__declspec(dllimport)#endif//这边设置任何的数据构造和标记//设置导出的变量(制止导出变量)MYLIBAPIintg_nResult;//设置导出因变量原形MYLIBAPIintAdd(intnLeft,intnRight);DLL源文献

//MyLibFile1.cpp//包括规范Windows和C运转时头文献#include<windows.h>//DLL源码文献导出的因变量和变量#defineMYLIBAPIextern"C"__declspec(dllexport)//包括导出的数据构造、标记、因变量、变量#include"MyLib.h"//将此DLL源代码文献的代码放在此处intg_nResult;intAdd(intnLeft,intnRight){g_nResult=nLeft+nRight;returng_nResult;}DLL库的运用(运转时动静链接DLL)

DLL库的运用(运转时动静链接DLL)

//AsimpleprogramthatusesLoadLibraryand//GetProcAddresstoaccessmyPutsfromMyputs.dll.#include<windows.h>#include<stdio.h>typedefint(__cdecl*MYPROC)(LPWSTR);intmain(void){HINSTANCEhinstLib;MYPROCProcAdd;BOOLfFreeResult,fRunTimeLinkSuccess=FALSE;//GetahandletotheDLLmodule.hinstLib=LoadLibrary(TEXT("MyPuts.dll"));//Ifthehandleisvalid,trytogetthefunctionaddress.if(hinstLib!=NULL){ProcAdd=(MYPROC)GetProcAddress(hinstLib,"myPuts");//Ifthefunctionaddressisvalid,callthefunction.if(NULL!=ProcAdd){fRunTimeLinkSuccess=TRUE;(ProcAdd)(L"MessagesenttotheDLLfunctionn");}//FreetheDLLmodule.fFreeResult=FreeLibrary(hinstLib);}//IfunabletocalltheDLLfunction,useanalternative.if(!fRunTimeLinkSuccess)printf("Messageprintedfromexecutablen");return0;}运转库(RuntimeLibrary)

典范步调运转办法

(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里实行。

MSVCCRT进口

intmainCRTStartup(void)

实行如次操纵:

(1)初始化和OS本子相关的全部变量。

(2)初始化堆。

(3)初始化I/O。

(4)获得吩咐行参数和情况变量。

(5)初始化C库的少许数据。

(6)挪用main并记载归来值。

(7)查看缺点并将main的归来值归来。

C谈话运转库(CRT)

大概包括如次功效:

启用与退出:囊括进口因变量及进口因变量所依附的其余因变量等。

规范因变量:有C谈话规范规则的C谈话规范库所具有的因变量实行。

I/O:I/O功效的封装和实行。

堆:堆的封装和实行。

谈话实行:谈话中少许特出功效的实行。

调节和测试:实行调节和测试功效的代码。

C谈话规范库(ANSIC)

包括:

规范输出输入(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)

猜你喜欢