C#編程-48:文本控件復習筆記_彭世瑜_新浪博客
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 函數聲明
// 載入庫 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小時內刪除侵權內容。