C/C++

Visual Studio 2019 建立 DLL 動態連結函式庫教學與範例

介紹如何使用 Visual Studio 2019 將自己撰寫的 C++ 程式編譯成 DLL 動態連結函式庫。

建立 DLL 動態連結函式庫

Step 1
開啟 Visual Studio 2019,點選「建立新的專案」。

建立新專案

Step 2
專案的類型請選擇「動態連結程式庫(DLL)」。

選擇「動態連結程式庫(DLL)」

Step 3
輸入專案的名稱,並點選「建立」。

設定專案名稱

在建立動態連結程式庫專案之後,專案內會包含一些基本的內容,這些程式碼基本上不需要更動。

基本專案內容

Step 4
在「標頭檔」上按下滑鼠右鍵,選擇「加入」中的「新增項目」。

加入標頭檔

Step 5
項目類型選擇「標頭檔(.h)」。

新增標頭檔

Step 6
在新增的標頭檔中,填入以下程式碼。

#pragma once

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

// 計算歐氏距離(Euclidean Distance)函數
extern "C" MYDLL_API double dist(
  const double x1, const double y1,
  const double x2, const double y2);
標頭檔程式碼

關於此處 dllexportdllimport 的結構用法,可以參考 OT Coding Note 的解說。

Step 7
在「來源檔案」上按下滑鼠右鍵,選擇「加入」中的「新增項目」。

加入來源檔案

Step 8
項目類型選擇「C++ 檔(.cpp)」。

新增 C++ 檔

Step 9
在新增的 C++ 檔中,填入以下程式碼。

#include "pch.h"
#include <cmath>
#include "MyDLL.h"

// 計算歐氏距離(Euclidean Distance)函數
double dist(
  const double x1, const double y1,
  const double x2, const double y2) {
  return std::sqrt(std::pow(x1 - x2, 2) + std::pow(y1 - y2, 2));
}
C++ 檔程式碼

Step 10
在「建置」選單中選擇建置自己的專案。

建置專案

專案建置完成之後,在下方的輸出訊息中就會顯示產生的 DLL 檔案路徑,這樣就完成 DLL 動態連結函式庫的建立了。

DLL 函式庫建置完成

Step 11
開啟 DLL 檔案所在的目錄,就可以看到產生的 DLL 函式庫檔案了。

DLL 函式庫檔案

使用 DLL 動態連結函式庫

建立好自己的 DLL 動態連結函式庫之後,就可以在其他專案中使用這個 DLL 動態連結函式庫了,以下是詳細的操作步驟。
Step 1
新增一個「主控台應用程式」類型的專案(或是其他類型的專案亦可)。

建立「主控台應用程式」

Step 2
在「專案」選單中,點選專案的屬性。

修改專案屬性

Step 3
在「C/C++」的「一般」設定中,修改「其他 Include 目錄」設定,加入 MyDLL.h 標頭檔案所在的目錄。

加入 MyDLL.h 標頭檔所在目錄

Step 4
在「連結器」的「一般」設定中,修改「其他程式庫目錄」設定,加入 MyDLL.lib 程式庫檔案所在的目錄。

加入 MyDLL.lib 程式庫檔案所在目錄

Step 5
在「連結器」的「輸入」設定中,修改「其他相依姓」設定,加入 MyDLL.lib 程式庫檔案。

加入 MyDLL.lib 程式庫檔案

Step 6
在「建置事件」的「建置後事件」設定中,將「命令列」內容設定為以下指令,讓每次專案建置之後,自動將 MyDLL.dll 檔案複製到專案建置的目錄,跟執行檔案放在一起:

xcopy /y /d "..\..\MyDLL\$(IntDir)MyDLL.dll" "$(OutDir)"
設定建置後事件

Step 7
編輯 C/C++ 程式碼,引入 MyDLL.h 之後即可使用其中的函數。

#include <iostream>
#include "MyDLL.h"
int main() {
  double d = dist(1.0, 2.0, 4.0, 6.0);
  std::cout << "d = " << d << std::endl;
  return 0;
}

編輯好 C/C++ 程式碼之後,即可編譯並執行。

編譯、執行 C/C++ 程式

這是將 C/C++ 程式編譯之後,搭配 DLL 動態連結函式庫執行的結果。

搭配 DLL 動態連結函式庫執行的結果

參考資料:微軟官方文件wikiHowWolfprojectsMicrosoftDocs

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago