開發環境建立(Visual Studio x86)
在開始修改或編譯 MapleEzorsia-v2 之前,你需要在電腦上安裝並設定好 Visual Studio。這篇筆記會一步一步帶你完成整個流程,即使你從未接觸過程式,也能跟著做完。
一、需要安裝什麼
1-1 下載 Visual Studio Community(免費)
Visual Studio 是微軟官方的 C++ 開發工具,Community 版本完全免費。
- 前往官方網站:https://visualstudio.microsoft.com/
- 點選「下載 Visual Studio」→ 選擇 Community 版本
- 執行下載的安裝程式(
vs_community__*.exe)
2019 還是 2022?
兩個版本都可以編譯本專案。建議直接選 Visual Studio 2022,官方維護期較長,更新也比較頻繁。
1-2 安裝時選擇正確的 Workload
安裝程式啟動後會出現「Workloads」選擇畫面。這裡決定了你要安裝哪些功能模組。
這一步不能跳過
如果沒有選對 Workload,等一下開啟專案就會出現「找不到編譯器」的錯誤。
必須勾選的項目:
-
在左側清單找到並勾選: 「使用 C++ 的桌面開發」 (英文介面:Desktop development with C++)
-
右側「安裝詳細資料」區塊會自動勾選一批元件,請確認其中包含:
- MSVC v143 - VS 2022 C++ x86/x64 build tools(這是 C++ 編譯器本體)
- Windows 11 SDK(或 Windows 10 SDK,任一版本皆可)
- C++ CMake tools for Windows(可選,不影響本專案)
-
確認後按右下角「安裝」,等待下載完成(約 5~10 GB)。
截圖建議
在 Workload 選擇畫面截一張圖,標記「Desktop development with C++」的位置,方便日後重新安裝時對照。
二、什麼是 x86 平台(32-bit vs 64-bit)
2-1 用「車道」來理解位元數
你可以把電腦的記憶體想像成一條高速公路:
| 比喻 | 對應的技術概念 |
|---|---|
| 32-bit 程式(x86) | 只能走 2 線道的舊公路,最多到達約 4 GB 的記憶體 |
| 64-bit 程式(x64) | 能走 8 線道的新高速路,記憶體幾乎無上限 |
兩種程式就像走不同公路的車,彼此無法直接交會。
2-2 為什麼 MapleStory v83 是 32-bit?
MapleStory v83 發布於 2007 年前後。那個年代,一般家用電腦大多還是 32-bit 系統,64-bit 作業系統尚未普及。Nexon 自然就把遊戲設計成 32-bit 程式(MapleStory.exe 是 x86 程式)。
2-3 為什麼我們的 DLL 也必須是 32-bit?
這是作業系統的硬性規定:
DLL 位元數必須和主程式相同
- 32-bit 程式(MapleStory.exe)只能載入 32-bit DLL
- 如果你把 DLL 編譯成 64-bit(x64),注入時會直接失敗,且不會有任何有用的錯誤提示
這就是為什麼 README 特別強調:This code can only be compiled on the x86 platform.
三、開啟專案
3-1 取得專案檔案
你需要先把 MapleEzorsia-v2 的原始碼放到電腦上。通常有兩種方式:
- 直接下載 ZIP:從 GitHub 頁面點選「Code → Download ZIP」,解壓縮到任意資料夾
- Git Clone(如果你有安裝 Git):
git clone https://github.com/xxx/MapleEzorsia-v2.git
建議存放位置
避免放在含有中文或空格的路徑下(例如「桌面/我的專案」),部分舊版工具對中文路徑相容性較差。 例如放在
C:\Projects\MapleEzorsia-v2\是個安全選擇。
3-2 雙擊 .sln 開啟
進入解壓縮後的資料夾,找到這個檔案並雙擊:
Ezorsia V2.sln
Windows 會自動用 Visual Studio 開啟它。
截圖建議
截一張「資料夾內容」的圖,標示
Ezorsia V2.sln的位置與副檔名(.sln)。
3-3 Solution Explorer 的結構
Visual Studio 開啟後,左側會有一個「Solution Explorer」(方案總管)面板,結構大致如下:
Solution 'Ezorsia V2'
└── ezorsia
├── 標頭檔 (Header Files)
│ ├── stdafx.h
│ ├── targetver.h
│ ├── Client.h
│ ├── Memory.h
│ └── MainMain.h
├── 原始程式檔 (Source Files)
│ └── *.cpp
└── 資源檔 (Resource Files)
Solution 和 Project 的差別
- Solution(.sln):整個工作空間的容器,可以包含多個子專案
- Project(.vcxproj):實際的程式碼單元,本專案只有
ezorsia這一個
四、關鍵編譯設定
這是最容易出錯的地方,請仔細確認。
4-1 確認 Platform 是 x86
Visual Studio 頂端工具列有兩個下拉選單,緊鄰在「播放」按鈕旁邊:
[Debug ▼] [x86 ▼] ▶ 本機 Windows 偵錯工具
- 第一個下拉選單是「Configuration(組態)」
- 第二個下拉選單是「Platform(平台)」
Platform 必須選 x86
如果顯示的是
x64,請點選下拉改成x86。 若下拉選單裡沒有x86選項,表示安裝 Visual Studio 時沒有選到正確的 build tools,需要重新執行 Visual Studio Installer 補裝。
截圖建議
截一張工具列的截圖,用箭頭標示「Configuration」和「Platform」兩個下拉選單的位置。
4-2 Release vs Debug 的差別
| 組態 | 說明 | 使用時機 |
|---|---|---|
| Debug | 包含偵錯資訊,檔案較大,執行較慢 | 開發中測試用 |
| Release | 最佳化後的版本,檔案較小,執行較快 | 實際注入遊戲使用 |
一般使用選 Release。Debug 版雖然方便除錯,但注入遊戲後有時行為會不同。
五、stdafx.h 是什麼
5-1 預先編譯標頭(PCH)的概念
每次編譯 C++ 程式,編譯器都要重新讀取並解析所有 #include 的標頭檔。如果每個 .cpp 都各自引入 <windows.h>,等於每個檔案都要重新處理一遍同樣的內容,非常耗時。
預先編譯標頭(Precompiled Header,PCH) 的概念是:
把最常用、最少變動的 include 全部集中在
stdafx.h,讓編譯器預先處理一次,之後每個 .cpp 都直接使用這份快取,大幅加快編譯速度。
5-2 本專案的 stdafx.h 內容解析
#pragma once
#include "targetver.h" // 指定目標 Windows 版本
#define WIN32_LEAN_AND_MEAN // 減少不必要的 Windows 標頭(見下方說明)
#include <windows.h> // Windows 作業系統 API(必要)
#include <iostream> // C++ 標準輸入/輸出(cout、cin)
#include "Client.h" // 遊戲客戶端相關定義
#include "Memory.h" // 記憶體讀寫工具
#include "MainMain.h" // 主要邏輯入口5-3 WIN32_LEAN_AND_MEAN 是什麼?
windows.h 本身非常龐大,預設會引入很多我們用不到的子模組(例如多媒體、OLE、網路元件等)。加上這行定義後,可以跳過那些不必要的部分,讓編譯速度更快、也減少命名衝突的可能性。
可以把它理解成「精簡模式」
WIN32_LEAN_AND_MEAN= 「只給我 Windows 的核心功能就好,其他免了」
六、第一次編譯
6-1 執行編譯
確認 Platform 是 x86、Configuration 是 Release 後:
- 快捷鍵:Ctrl + Shift + B
- 或點選選單:Build → Build Solution
Visual Studio 下方的「輸出(Output)」視窗會顯示編譯過程。若成功,最後一行會出現:
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
截圖建議
截一張編譯成功後 Output 視窗的截圖,標示這行成功訊息。
6-2 找到編譯好的 .dll 檔
編譯成功後,輸出的 DLL 檔案位置在:
專案根目錄\Release\ezorsia.dll
例如你把專案放在 C:\Projects\MapleEzorsia-v2\,DLL 就會在:
C:\Projects\MapleEzorsia-v2\Release\ezorsia.dll
這個 .dll 檔就是之後要注入到 MapleStory.exe 的主角。
6-3 常見錯誤:找不到 detours.lib
如果編譯時出現類似這樣的錯誤:
LINK : fatal error LNK1181: cannot open input file 'detours\detours.lib'
這表示 Microsoft Detours 函式庫的位置不對。
解決方法
- 確認專案資料夾內有
detours\子資料夾- 該資料夾內應包含:
detours.libsyelog.libdetours.h(標頭檔)- 如果沒有,需要重新從原始倉庫(repository)完整下載,不能只複製 .cpp 原始碼
什麼是 Detours?
Microsoft Detours 是微軟提供的一套函式庫,讓程式可以「攔截」(hook)其他程式的函式呼叫。MapleEzorsia-v2 用它來攔截遊戲內部的函式,達到修改遊戲行為的目的。詳細原理見 02_Detours函式庫使用方式。
延伸閱讀
- 01_什麼是DLL與DLL劫持 — 了解 DLL 是什麼、為什麼注入 DLL 可以影響遊戲
- 01_專案總覽(.sln與.vcxproj) — Phase 2:認識 ezorsia 專案的每個資料夾與檔案
- 04_如何編譯第一個DLL — Phase 2:從原始碼到 dinput8.dll 的完整編譯流程
- 01_什麼是函式掛鉤(Hooking) — Phase 4:深入了解 detours.lib 的作用與 function hook 的原理