開發環境建立(Visual Studio x86)

在開始修改或編譯 MapleEzorsia-v2 之前,你需要在電腦上安裝並設定好 Visual Studio。這篇筆記會一步一步帶你完成整個流程,即使你從未接觸過程式,也能跟著做完。


一、需要安裝什麼

1-1 下載 Visual Studio Community(免費)

Visual Studio 是微軟官方的 C++ 開發工具,Community 版本完全免費

  1. 前往官方網站:https://visualstudio.microsoft.com/
  2. 點選「下載 Visual Studio」→ 選擇 Community 版本
  3. 執行下載的安裝程式(vs_community__*.exe

2019 還是 2022?

兩個版本都可以編譯本專案。建議直接選 Visual Studio 2022,官方維護期較長,更新也比較頻繁。


1-2 安裝時選擇正確的 Workload

安裝程式啟動後會出現「Workloads」選擇畫面。這裡決定了你要安裝哪些功能模組。

這一步不能跳過

如果沒有選對 Workload,等一下開啟專案就會出現「找不到編譯器」的錯誤。

必須勾選的項目:

  1. 在左側清單找到並勾選: 「使用 C++ 的桌面開發」 (英文介面:Desktop development with C++

  2. 右側「安裝詳細資料」區塊會自動勾選一批元件,請確認其中包含:

    • MSVC v143 - VS 2022 C++ x86/x64 build tools(這是 C++ 編譯器本體)
    • Windows 11 SDK(或 Windows 10 SDK,任一版本皆可)
    • C++ CMake tools for Windows(可選,不影響本專案)
  3. 確認後按右下角「安裝」,等待下載完成(約 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 的原始碼放到電腦上。通常有兩種方式:

  1. 直接下載 ZIP:從 GitHub 頁面點選「Code → Download ZIP」,解壓縮到任意資料夾
  2. 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 偵錯工具
  1. 第一個下拉選單是「Configuration(組態)
  2. 第二個下拉選單是「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 函式庫的位置不對

解決方法

  1. 確認專案資料夾內有 detours\ 子資料夾
  2. 該資料夾內應包含:
    • detours.lib
    • syelog.lib
    • detours.h(標頭檔)
  3. 如果沒有,需要重新從原始倉庫(repository)完整下載,不能只複製 .cpp 原始碼

什麼是 Detours?

Microsoft Detours 是微軟提供的一套函式庫,讓程式可以「攔截」(hook)其他程式的函式呼叫。MapleEzorsia-v2 用它來攔截遊戲內部的函式,達到修改遊戲行為的目的。詳細原理見 02_Detours函式庫使用方式


延伸閱讀