簡単にその手順を説明する。
(1).まずVectorのこちらからnkf32.dllを入手しよう。
(2).C++実行環境と同じフォルダにnkf32.dllをコピーする。
(3).後は普通にDLLの関数を呼び出すやり方で日本語文字コード変換(EUC/JIS/SHIFT-JIS/UTF-8などの相互変換)を行うことが出来る。
参考までにサンプルコードを次に記しておく。
★ まずh部かどこかでtypedefしておく
typedef BOOL (__stdcall *funcNkfConvertSafe)(LPSTR, DWORD, LPDWORD, LPCSTR, DWORD);
typedef int (__stdcall *funcSetNkfOption)(LPCSTR);
typedef BOOL (__stdcall *funcNkfConvertSafe)(LPSTR, DWORD, LPDWORD, LPCSTR, DWORD);
typedef int (__stdcall *funcSetNkfOption)(LPCSTR);
★ std::string型の自動変数l_StringUTF8にUTF-8文字列が格納済の時に、
★ 以下コードを実行すると、
★ TCHAR型のl_OutBuff[256]配列に、Shift-JISに変換された文字列が格納される。
DWORD l_CodeKind = 0;
HINSTANCE l_Hs = LoadLibrary("nkf32.dll");
funcSetNkfOption SetNkfOption = (funcSetNkfOption)GetProcAddress(l_Hs, "SetNkfOption");
l_Ret = SetNkfOption( "-W8sx" ); // UTF-8からShift-JISに変換オプション設定
funcNkfConvertSafe NkfConvertSafe = (funcNkfConvertSafe)GetProcAddress(l_Hs, "NkfConvertSafe");
DWORD l_bytesReturned = 0;
TCHAR l_OutBuff[256];
memset( &l_OutBuff[0], 0x00, sizeof( l_OutBuff ) );
l_Ret = NkfConvertSafe( &l_OutBuff[0], sizeof( l_OutBuff ), &l_bytesReturned, l_StringUTF8.c_str(), l_StringUTF8.length() );
::FreeLibrary( l_Hs );
★ 以下コードを実行すると、
★ TCHAR型のl_OutBuff[256]配列に、Shift-JISに変換された文字列が格納される。
DWORD l_CodeKind = 0;
HINSTANCE l_Hs = LoadLibrary("nkf32.dll");
funcSetNkfOption SetNkfOption = (funcSetNkfOption)GetProcAddress(l_Hs, "SetNkfOption");
l_Ret = SetNkfOption( "-W8sx" ); // UTF-8からShift-JISに変換オプション設定
funcNkfConvertSafe NkfConvertSafe = (funcNkfConvertSafe)GetProcAddress(l_Hs, "NkfConvertSafe");
DWORD l_bytesReturned = 0;
TCHAR l_OutBuff[256];
memset( &l_OutBuff[0], 0x00, sizeof( l_OutBuff ) );
l_Ret = NkfConvertSafe( &l_OutBuff[0], sizeof( l_OutBuff ), &l_bytesReturned, l_StringUTF8.c_str(), l_StringUTF8.length() );
::FreeLibrary( l_Hs );
最後にDLLやC++に対するお勧め書籍を挙げておこう。C++の奥の深さはC#やVBの比ではないのである。
Win32 APIシステムプログラミング with Visual C++ 2008/独習C++/STL標準講座―標準テンプレートライブラリを利用したC++プログラミング (Programmer’s SELECTION)