軟體國際化是老生常談,但實作細節繁瑣,初學者易走彎路。本文詳述如何使用 VC 純資源 DLL(Satellite DLL) 實現中英文界面切換,架構清晰,易於擴充至多國語言。
MFC 載入資源時預設優先搜尋 EXE 自身資源,再搜尋 DLL。使用 AfxSetResourceHandle() 可強制改變搜尋順序,優先載入指定語言的資源 DLL。
Multilanguage.rc、Resource.h、res 目錄下所有檔案English.rc、Resource.h、res 目錄到 English 專案_AFXDLLEnglish.dllChinese/NOENTRY(純資源 DLL 無進入點)Chinese.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();
}

新增語言只需:
Japanese、German)LoadLibrary 判斷邏輯TCHAR、CString 等 Unicode 相容型別/NOENTRY 選項僅適用於純資源 DLL(無 DllMain、無程式碼)這種 Satellite DLL 架構是 Windows 經典國際化方案,結構清晰、維護容易,至今仍適用於 MFC 專案。