From: "H.Yamamoto" Date: 2004-06-16T22:50:37+09:00 Subject: [ruby-dev:23698] Re: WIN32OLEの日本語エラーメッセージが切り詰められる 山本です。 FormatMessage が失敗したときに p_msg に LocalAlloc されない かもしれないので、char *p_msg = NULL としたほうがいいと思います。 メッセージの加工についてはよくわかりませんが、cygwin で CharPrev が 使えるなら、オリジナルと同じ挙動にすることは可能だと思います。 (そこまでする必要があるかどうかは、わかりません) Index: win32ole.c =================================================================== RCS file: /var/cvs/src/ruby/ext/win32ole/win32ole.c,v retrieving revision 1.22 diff -u -w -b -p -r1.22 win32ole.c --- win32ole.c 8 May 2004 03:54:51 -0000 1.22 +++ win32ole.c 16 Jun 2004 11:26:48 -0000 @@ -488,7 +488,7 @@ ole_hresult2msg(hr) HRESULT hr; { VALUE msg = Qnil; - char *p_msg; + char *p_msg = NULL; DWORD dwCount; char strhr[100]; @@ -501,15 +501,13 @@ ole_hresult2msg(hr) NULL, hr, LOCALE_SYSTEM_DEFAULT, (LPTSTR)&p_msg, 0, NULL); if (dwCount > 0) { - /* remove dots and CRs/LFs */ - while (dwCount > 0 && - (p_msg[dwCount-1] < ' ' || p_msg[dwCount-1] == '.')) { - p_msg[--dwCount] = '\0'; - } + char *term = strrchr(p_msg, '\r'); + if (term) *term = '\0'; if (p_msg[0] != '\0') { rb_str_cat2(msg, p_msg); } } + LocalFree(p_msg); return msg; }