首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC 純資源 DLL 實現多語言國際化:完整實作指南

     編輯:關於VC++

軟體國際化是老生常談,但實作細節繁瑣,初學者易走彎路。本文詳述如何使用 VC 純資源 DLL(Satellite DLL) 實現中英文界面切換,架構清晰,易於擴充至多國語言。

核心原理:動態切換資源載入順序

MFC 載入資源時預設優先搜尋 EXE 自身資源,再搜尋 DLL。使用 AfxSetResourceHandle() 可強制改變搜尋順序,優先載入指定語言的資源 DLL。

專案架構:一主程式 + 多語言 DLL

  • Multilanguage (EXE):主程式,不含任何資源
  • Chinese (DLL):繁體/簡體中文資源
  • English (DLL):英文資源

關鍵實作步驟

1. 建立主專案並移除所有資源

  • 專案類型:MFC AppWizard (exe)
  • 從 Resource View 移除所有資源檔
  • 從 File View 移除 Multilanguage.rc、Resource.h、res 目錄下所有檔案

2. 建立英文資源 DLL

  • 專案類型:MFC AppWizard (dll) → Regular DLL Using Shared MFC DLL
  • 專案名:English
  • 同樣移除所有預設資源
  • 複製主專案的 .rc、Resource.h、res 目錄到 English 專案
  • 將所有中文資源字串改為英文
  • 專案設定 → Resources 標籤:語言選 English (U.S.),移除預處理器定義 _AFXDLL
  • 編譯產生 English.dll

3. 建立中文資源 DLL

  • 同英文 DLL 步驟,專案名 Chinese
  • 專案設定 → Link 標籤 → Project Options 加入 /NOENTRY(純資源 DLL 無進入點)
  • 編譯產生 Chinese.dll

4. 主程式動態載入對應 DLL

// CMultilanguageApp 類別成員
private:
    BOOL m_bChinese;
    HINSTANCE m_hLangDLL;

// 建構函式
CMultilanguageApp::CMultilanguageApp() {
    m_bChinese = TRUE;
    m_hLangDLL = NULL;
}

// InitInstance:切換資源鏈
BOOL CMultilanguageApp::InitInstance() {
    AfxEnableControlContainer();

    if (m_bChinese)
        m_hLangDLL = ::LoadLibrary(_T("Chinese.dll"));
    else
        m_hLangDLL = ::LoadLibrary(_T("English.dll"));

    AfxSetResourceHandle(m_hLangDLL);  // 關鍵:設定資源鏈

    // ... 其他初始化
    return TRUE;
}

// ExitInstance:釋放 DLL
int CMultilanguageApp::ExitInstance() {
    if (m_hLangDLL) AfxFreeLibrary(m_hLangDLL);
    return CWinApp::ExitInstance();
}

執行畫面

多語言切換效果圖

擴充至多國語言

新增語言只需:

  1. 建立新的語言 DLL 專案(如 Japanese、German)
  2. 在主程式加入對應的 LoadLibrary 判斷邏輯
  3. 提供語言選單讓使用者切換

注意事項

  • 資源 DLL 必須與 EXE 置於同一目錄,或在系統 PATH 中
  • 使用 TCHAR、CString 等 Unicode 相容型別
  • 圖示、對話框、選單、字串表等所有資源都需在各語言 DLL 中完整翻譯
  • /NOENTRY 選項僅適用於純資源 DLL(無 DllMain、無程式碼)

編譯環境

  • Visual Studio 6.0 / VC++ 6.0
  • 原始碼已附上,聯繫:QQ 36201365 / ldh5118@sohu.com

這種 Satellite DLL 架構是 Windows 經典國際化方案,結構清晰、維護容易,至今仍適用於 MFC 專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved