GIMP 2.8ツールオプションに文字消えるバグの回避パッチの作成方法
GIMP 2.8 (Win32)は中国語および日本語OSで実行する時、
ツールオプションに文字はよく消える。
回避対策として環境変数のLANGをenに設定すればいい。
前に私はその「環境変数LANGをenにする」って手順をEXEに入らせる。
今はその方法より簡単な方法をここで紹介する。
使ったツールはVC++、そしてCFF Explorer。
「環境変数LANGをenにする」と言うC言語コードはこれです:
でもgimp-2.8.exe使ってるC言語ランタイムは自分のVCコンパイラーの使ってるC言語ランタイムと違ってる可能性がある。安全な方法はLoadLibraryとGetProcAddressでputenv関数のアドレスを取得する
putenv("LANG=en");
このコードをDLLファイルに入る、そしてgimp-2.8.exeの起動するときその自作DLLをロードすればパッチはできた。
HMODULE hCRT = LoadLibraryW(L"msvcrt.dll");
int (__cdecl *fPutenv)(const char*) = (int (__cdecl*)(const char*)) GetProcAddress(hCRT, "_putenv");
fPutenv("LANG=en");
#include <windows.h>
DWORD CALLBACK DllMain(HINSTANCE hDll, DWORD nReason, LPVOID pUseless)
{
if (nReason == DLL_PROCESS_ATTACH) {
HMODULE hCRT = LoadLibraryW(L"msvcrt.dll");
int (__cdecl *fPutenv)(const char*) = (int (__cdecl*)(const char*)) GetProcAddress(hCRT, "_putenv");
fPutenv("LANG=en");
}
return TRUE;
}
extern "C" __declspec(dllexport) void dummy() {}
起動するときDLLをロードしたいなら、何かの関数をインポートしないとだめです。だからそのdummyは・・・
このソースをコンパイルする:
cl /LD gimpPatch.cpp
そしてCFF Explorerの出番です。CFF Explorerでgimp-2.8.exeを開いて、
左側でImport Adder機能を選んで、右側でAdd -> gimpPatch.dll -> dummy -> Import By Name -> Rebuild Import Table。後はEXEファイルをセーブして、完成です。
gimpPatch.dllをgimp-2.8.exeと同じフォルダで放置して、gimp2.8.exe起動して試す。そのバグを回避したはず。
パッチ作成は普通でUDM Free利用すればいい。
私の使った方法はDLLの代わりに、直接そのコードをGIMP-2.8.exeに入る。
パッチ作成はNSISとVPatchを利用するのです。