0%

[DLL] 在 C++ 中調用 dll 的函式

前言

此篇文章紀錄如何在 C++ 中,使用 LoadLibraryA/LoadLibraryW 調用 dll。

環境

  • Windows 10
  • Visual Studio 2017

準備一個 DLL

先自己寫一個 dll,詳細步驟說明請參考:[DLL] 使用 VS 2017 寫包含 DllMain 的 dll

創建專案

開啟 VS 2017,新開一個專案 File → New → Project 或組合鍵 Ctrl + Shift + N,點擊 Visual C++ 之下的 Windows Desktop,選擇 Windows Desktop Wizard,在 Name 輸入好專案名稱後,按 OK 進到下個步驟

新建專案新建專案

選擇專案類型選擇專案類型

Application type 選 Console Application(.exe),Addtional options 都不用勾!按下 OK 就會建立好一個專案,預設會自動開啟專案中的 {project_name}.cpp

選擇 dll選擇 dll

編寫程式

將下面的程式碼貼到 {project_name}.cpp 中,(參考原始碼:GitHub)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <windows.h>

typedef void(*voidFun)();

int main()
{
HMODULE hDll = LoadLibraryA("dllMainAndFun.dll");

voidFun pHelloWorldFun = (void(*)())GetProcAddress(hDll, "helloWorldFun");

pHelloWorldFun();

return 0;
}

將要匯入的 dll 放到 Debug 目錄下,否則 LoadLibraryA 需要給 dll 的絕對路徑,因為 Debug 模式編譯出來的執行檔都存在此處。

完成

按下 F5,開始 Debug 模式,看到彈出視窗 (MessageBoxA/MessageBoxW),就代表載入成功了!顯示順序應為

  1. 程序建立時被呼叫
  2. 此函式呼叫成功
  3. 程序退出時被呼叫
很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵