前言
此篇文章紀錄如何在 VS 2017 寫一個 dll,其包含 DllMain
與一個 dllexport
函數。若要知道如何在其它的 C++ 專案中調用在 dll 中的函數,請參考 [DLL] 在 C++ 中調用 dll 的函式。
環境
- Windows 10
- Visual Studio 2017
創建專案
確認環境
開啟 Visual Studio Installer
,確認 Desktop development with C++
已安裝,才可進行下面的步驟
確認環境
新增專案
開啟 VS 2017,新開一個專案 File → New → Project
或組合鍵 Ctrl + Shift + N
,點擊 Visual C++
之下的 Windows Desktop
,選擇 Windows Desktop Wizard
,在 Name
輸入好專案名稱後,按 OK
進到下個步驟
新建專案
選擇專案類型
Application type 選 Dynamic Link Library(.dll)
,Addtional options 都不用勾!按下 OK
就會建立好一個專案,預設會自動開啟專案中的 dllmain.cpp
選擇 dll
編寫程式
將下面的程式碼貼到 dllmain.cpp
中,(參考原始碼:GitHub)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include "framework.h" #define DLLMAIN_API __declspec(dllexport)
extern "C" DLLMAIN_API void helloWorldFun() { MessageBoxW(0, L"此函式呼叫成功", L"helloWorldFun", 0); }
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: MessageBox(0, L"程序建立時被呼叫", L"DllMain", 0); break; case DLL_THREAD_ATTACH: MessageBox(0, L"執行緒建立時被呼叫", L"DllMain", 0); break; case DLL_THREAD_DETACH: MessageBox(0, L"執行緒退出時被呼叫", L"DllMain", 0); break; case DLL_PROCESS_DETACH: MessageBox(0, L"程序退出時被呼叫", L"DllMain", 0); break; } return TRUE; }
|
完成
點擊功能選單 Build → Build Solution
,可在 Output 視窗看到下方提示,會在專案下的 Debug 目錄產出 dll 檔案,檔名與專案名稱相同
Build Solution
1 2 3 4 5
| 1>------ Build started: Project: Project1, Configuration: Debug Win32 ------ 1>dllmain.cpp 1> Creating library C:\Users\wrxue\source\repos\Project1\Debug\Project1.lib and object C:\Users\wrxue\source\repos\Project1\Debug\Project1.exp 1>Project1.vcxproj -> C:\Users\wrxue\source\repos\Project1\Debug\Project1.dll ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
|
此時的 Project1.dll
就是包含 DllMain
與一個匯出函式 helloWorldFun
的 dll 檔案囉!