Windows動態鏈接庫(Dynamic-Link Library)

      網友投稿 1226 2025-04-01

      Windows 的動態鏈接庫(Dynamic-Link Library)

      擴展了應用程序的特性

      簡化了項目管理

      有助于節省內存

      促進了資源的共享

      促進了本地化

      有助于解決平臺間的差異

      可以用于特殊目的

      創建 DLL,事實上是在創建可供一個可執行模塊調用的函數

      當一個模塊提供一個內存分配函數(malloc、new)的時候,它必須同時提供另一個內存釋放函數(free、delete)

      在使用 C 和 C++ 混編的時候,要使用 extern "C" 修飾符

      一個 DLL 可以導出函數、變量(避免導出)、C++ 類(導出導入需要同編譯器,否則避免導出)

      DLL 模塊:cpp 文件中的 __declspec(dllexport) 寫在 include 頭文件之前

      調用 DLL 的可執行模塊:cpp 文件的 __declspec(dllimport) 之前不應該定義 MYLIBAPI

      包含可執行文件的目錄

      Windows 的系統目錄,可以通過 GetSystemDirectory 得到

      16 位的系統目錄,即 Windows 目錄中的 System 子目錄

      Windows 目錄,可以通過 GetWindowsDirectory 得到

      進程的當前目錄

      PATH 環境變量中所列出的目錄

      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 函數聲明

      Windows 的動態鏈接庫(Dynamic-Link Library)

      // 載入庫 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 );

      在?VS 的開發人員命令提示符?使用?DumpBin.exe?可查看 DLL 庫的導出段(導出的變量、函數、類名的符號)、相對虛擬地址(RVA,relative virtual address)。如:

      DUMPBIN -exports D:\mydll.dll

      Windows 通用安全

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:怎樣把文檔中的特殊名稱改為需要的文字(怎樣改文本文檔的后綴名)
      下一篇:制造業生產車間管理制度(車間生產與管理制定)
      相關文章
      日本亚洲欧美色视频在线播放| 亚洲午夜精品一区二区公牛电影院 | 亚洲中文字幕久久精品无码A| 亚洲精品在线播放| 亚洲∧v久久久无码精品| 人人狠狠综合久久亚洲婷婷| 亚洲欧洲日产国码无码网站| 在线亚洲午夜理论AV大片| 久久青青草原亚洲av无码| 久久精品亚洲福利| 狠狠色婷婷狠狠狠亚洲综合| 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲av第一网站久章草| 在线观看国产一区亚洲bd| 国产精品日本亚洲777| 亚洲AⅤ无码一区二区三区在线| 欧美亚洲国产SUV| xvideos亚洲永久网址| 亚洲成A人片在线观看无码3D | 亚洲人成电影福利在线播放| 亚洲精品高清久久| 亚洲色偷偷av男人的天堂| 亚洲国产福利精品一区二区| 亚洲一区二区三区久久久久| 亚洲国产区男人本色在线观看| 亚洲一区AV无码少妇电影| 亚洲av午夜电影在线观看| 成人精品国产亚洲欧洲| 亚洲色偷偷综合亚洲AV伊人| 国产午夜亚洲精品理论片不卡| 亚洲精品自在在线观看| 亚洲AV人人澡人人爽人人夜夜| 99久久精品国产亚洲| 亚洲六月丁香六月婷婷蜜芽| 亚洲国产成人精品不卡青青草原| 麻豆亚洲AV永久无码精品久久| 精品亚洲成a人片在线观看少妇| 亚洲精品**中文毛片| 亚洲偷自精品三十六区| 亚洲丰满熟女一区二区哦| 亚洲日本韩国在线|