[スレッド全体]

2011/4/26 (火) 07:16:01 syat  
Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
[5720] Re:リソースの外部DLL化
▼ なすこじさん
20110410の版で、DLLによって言語が切り替わることを確認しました。
DLL化はあきらかに有用なので、せっかくenglishブランチを切っていることだし、どんどんコミットしていったらどうでしょうか。

>あと必要なのは、現在読み込まれているDLLの情報表示や、exeとのバージョンが不一致の時の警告表示などでしょうか。
exeとのバージョン一致は課題ですね。本体をバージョンアップして、DLLのバージョンが古いままだと、新たに追加されたメッセージが空文字になってしまいとても残念。

以下、多言語化に対して気づいたことを。(亀レスで申し訳ないです)
・翻訳&文字列リソース化お疲れさまでした。>Lucienさん、なすこじさん
・英語版リソースで「(無題)」が「No Title11」のように連番がついたままです。
・ANSI版だと結局LoadStringAが呼ばれるのでsjis変換されるはず。本格的な多言語対応はUNICODE版かな?


もしUNICODE版に入れていくのであれば、以下も検討してほしいです。

・exeとDLLのバージョン不一致救済として、DLLから文字列を取得できなかったときは内部リソースから取得するようにしたらよいかも。
 ↓こんなメソッドを用意する
int CSelectLang::LoadString( UINT uid, LPSTR _pszLabel, int nBufferMax )
{
        int nRet = ::LoadString( getLangRsrcInstance(), uid, _pszLabel, nBufferMax );
        if( nRet == 0 ){
                return ::LoadString( ::GetModuleHandle(NULL), uid, _pszLabel, nBufferMax );
        }
        return nRet;
}

・毎回バッファを用意するのが正直面倒なので、糖衣構文が欲しい。
 ↓このくらい
LPSTR CSelectLang::LoadString2( UINT uid )
{
        char _pszLabel[1024];
        CSelectLang::LoadString( uid, _pszLabel, _countof(_pszLabel)-2 );
        return _pszLabel;
}
 ↓使用例
::MYMESSAGEBOX( m_hWnd, MB_OK , GSTR_APPNAME, CSelectLang::LoadString2( STR_ERR_DLGFIND1 ) );
 自動変数の返却がだめならstatic変数のバッファでもよいので。。

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81
[ut:0.000][st:0.000]