WWW·1519882·COM nxgx视频大全_电子邀请函助手
触触美国第一共和银行倒闭
2024年12月15日,“还在睡,没睡多久,妈妈,再过半小时我喊醒她行不?”
WWW·1519882·COM nxgx视频大全_电子邀请函助手
跟各自老公一说都炸了孩子谁接晚饭谁做要玩就等五一放假全家一起出游你们妯娌俩把我们老爷们和孩子都甩了自己出门算咋回事
特斯拉的iOS移动应用迎来重要更新,可使用Siri控制车辆。C++基础语法梳理:Windows 的动态链接库2021-11-01 17:46·C语言编程Windows 应用程序入口函数GUI(Graphical User Interface)应用,链接器选项:/SUBSYSTEM:WINDOWSCUI(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, DWORD dwFlags);// 若要在通用 Windows 平台(UWP)应用中加载 Win32 DLL,需要调用 LoadPackagedLibrary,而不是 LoadLibrary 或 LoadLibraryExHMODULE 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 的开发人员命令提示符 使用 DumpBin.exe 可查看 DLL 库的导出段(导出的变量、函数、类名的符号)、相对虚拟地址(RVA,relative virtual address)。如:LoadLibrary 与 FreeLibrary 流程图LoadLibrary 与 FreeLibrary 流程图LoadLibraryFreeLibraryDLL 库的编写(导出一个 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