From: "NARUSE, Yui" Date: 2008-01-28T12:28:38+09:00 Subject: [ruby-dev:33440] Re: Win32OLE: set encoding to OLE string 成瀬です、もうできた。 NARUSE, Yui wrote: > 実装の方はとりあえず ole_utf82wc と ole_wc2utf8 を用意すればいいんでしょ > うか。 > 他に影響範囲ありそうな気もしますがとりあえず用意しときます。 ndex: ext/win32ole/win32ole.c =================================================================== --- ext/win32ole/win32ole.c (revision 15284) +++ ext/win32ole/win32ole.c (working copy) @@ -784,6 +784,24 @@ ole_wc2mb(LPWSTR pw) return pm; } +static char * +ole_wc2utf8(LPWSTR pw) +{ + int size; + LPSTR pm; + size = WideCharToMultiByte(CP_UTF8, 0, pw, -1, NULL, 0, NULL, NULL); + if (size) { + pm = ALLOC_N(char, size + 1); + WideCharToMultiByte(CP_UTF8, 0, pw, -1, pm, size, NULL, NULL); + pm[size] = '\0'; + } + else { + pm = ALLOC_N(char, 1); + *pm = '\0'; + } + return pm; +} + static VALUE ole_hresult2msg(HRESULT hr) { @@ -963,6 +981,17 @@ ole_mb2wc(char *pm, int len) return pw; } +static LPWSTR +ole_utf82wc(char *pm, int len) +{ + int size; + LPWSTR pw; + size = MultiByteToWideChar(CP_UTF8, 0, pm, len, NULL, 0); + pw = SysAllocStringLen(NULL, size - 1); + MultiByteToWideChar(CP_UTF8, 0, pm, len, pw, size); + return pw; +} + static VALUE ole_wc2vstr(LPWSTR pw, BOOL isfree) { 手抜きって言わないでwwww -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA