0%

[DLL] 使用 VS 2017 寫包含 DllMain 的 dll

前言

此篇文章紀錄如何在 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選擇 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
// dllmain.cpp : Defines the entry point for the DLL application.
#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 SolutionBuild 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 檔案囉!

很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵