J2ME 專案常需針對不同機型、螢幕尺寸、API 支援度進行條件編譯。標準 Java 無預處理器,本文介紹如何整合 Borland C++ 5.5 的 cpp32.exe 到 WTK + EditPlus/UltraEdit 工作流,實現 #define、#ifdef、#include 等指令。
cpp32.exe (Borland C++ Win32 Preprocessor 5.5.1)cpp32.vbs (封裝腳本,自動處理路徑與參數)專案根目錄/ ├── src/ # WTK 編譯目標目錄 (預處理後輸出) └── srcp/ # 原始碼目錄 (含預處理指令)
cpp32.exe 與 cpp32.vbs 放置同一目錄 (建議 EditPlus 2/cusTools/)。preprocesscpp32.vbs 路徑$(FilePath) (目前編輯檔案完整路徑)srcp/ 下,儲存後執行 preprocess 工具,自動輸出處理後的 Java 檔至 src/。src/,正常 Build/Run。| 參數 | 說明 |
|---|---|
-o<file> | 指定輸出檔名 |
-D<macro> | 定義巨集 (等同 #define) |
-U<macro> | 取消定義巨集 |
-I<dir> | 指定 include 搜尋目錄 |
-C | 允許巢狀註解 |
-Sk | 發生錯誤時保留輸出檔 |
#define / #undef#include "file"#ifdef / #ifndef / #else / #endif#if 常數表達式 / #else / #endif' 取得當前編輯檔案路徑 (infileName)
' 輸出路徑:專案根目錄\src\原始檔名
' 執行:cpp32.exe -o"輸出檔" "輸入檔"
' 使用 WScript.Shell 執行命令並暫停視窗以便查看錯誤
腳本會自動驗證副檔名為 .java,並依約定目錄結構導出檔案。
// srcp/GameCanvas.java
#define SCREEN_W 240
#define SCREEN_H 320
#ifdef NOKIA_UI
#import com.nokia.mid.ui.*
#endif
public class GameCanvas extends Canvas {
// 使用 SCREEN_W, SCREEN_H 常數
// NOKIA_UI 區塊僅在定義時編入
}
預處理後輸出至 src/GameCanvas.java,#define 替換為字面值,#ifdef 區塊視定義情況保留或移除。