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

多条告白如次剧本只需引入一次
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)

推荐阅读