ruby-changes:8254
From: suke <ko1@a...>
Date: Tue, 14 Oct 2008 21:44:51 +0900 (JST)
Subject: [ruby-changes:8254] Ruby:r19782 (trunk): * ext/win32ole/win32ole.c (load_conv_function51932): check
suke 2008-10-14 21:44:37 +0900 (Tue, 14 Oct 2008) New Revision: 19782 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19782 Log: * ext/win32ole/win32ole.c (load_conv_function51932): check having IMultiLanguage2 or IMultiLanguage. [ruby-dev:36716] * ext/win32ole/extconf.rb: ditto. Modified files: trunk/ChangeLog trunk/ext/win32ole/extconf.rb trunk/ext/win32ole/win32ole.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19781) +++ ChangeLog (revision 19782) @@ -1,3 +1,10 @@ +Tue Oct 14 21:36:29 2008 Masaki Suketa <masaki.suketa@n...> + + * ext/win32ole/win32ole.c (load_conv_function51932): check + having IMultiLanguage2 or IMultiLanguage. [ruby-dev:36716] + + * ext/win32ole/extconf.rb: ditto. + Tue Oct 14 20:45:29 2008 Nobuyoshi Nakada <nobu@r...> * io.c (Init_IO): $FILENAME and $* must be read-only. [ruby-dev:36698] Index: ext/win32ole/win32ole.c =================================================================== --- ext/win32ole/win32ole.c (revision 19781) +++ ext/win32ole/win32ole.c (revision 19782) @@ -128,7 +128,7 @@ #define WC2VSTR(x) ole_wc2vstr((x), TRUE) -#define WIN32OLE_VERSION "1.3.6" +#define WIN32OLE_VERSION "1.3.7" typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX) (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); @@ -217,8 +217,15 @@ static IMessageFilterVtbl message_filter; static IMessageFilter imessage_filter = { &message_filter }; static IMessageFilter* previous_filter; -static IMultiLanguage2 *pIMultiLanguage2 = NULL; +#if defined(HAVE_TYPE_IMULTILANGUAGE2) +static IMultiLanguage2 *pIMultiLanguage = NULL; +#elif defined(HAVE_TYPE_IMULTILANGUAGE) +static IMultiLanguage *pIMultiLanguage = NULL; +#else +static void *pIMultiLanguage = NULL; /* dummy */ +#endif + struct oledata { IDispatch *pDispatch; }; @@ -971,15 +978,23 @@ static void load_conv_function51932() { - HRESULT hr; + HRESULT hr = E_NOINTERFACE; void *p; - if (!pIMultiLanguage2) { + if (!pIMultiLanguage) { +#if defined(HAVE_TYPE_IMULTILANGUAGE2) hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, &IID_IMultiLanguage2, &p); +#elif defined(HAVE_TYPE_IMULTILANGUAGE) + hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, + &IID_IMultiLanguage, &p); +#else + hr = E_NOINTERFACE; + p = NULL; +#endif if (FAILED(hr)) { rb_raise(eWIN32OLERuntimeError, "fail to load convert function for CP51932"); } - pIMultiLanguage2 = p; + pIMultiLanguage = p; } } @@ -1098,13 +1113,13 @@ DWORD dw = 0; if (cWIN32OLE_cp == 51932) { load_conv_function51932(); - hr = pIMultiLanguage2->lpVtbl->ConvertStringFromUnicode(pIMultiLanguage2, + hr = pIMultiLanguage->lpVtbl->ConvertStringFromUnicode(pIMultiLanguage, &dw, cWIN32OLE_cp, pw, NULL, NULL, &size); if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert Unicode to CP%d", cWIN32OLE_cp); } pm = ALLOC_N(char, size + 1); - hr = pIMultiLanguage2->lpVtbl->ConvertStringFromUnicode(pIMultiLanguage2, + hr = pIMultiLanguage->lpVtbl->ConvertStringFromUnicode(pIMultiLanguage, &dw, cWIN32OLE_cp, pw, NULL, pm, &size); if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert Unicode to CP%d", cWIN32OLE_cp); @@ -1340,14 +1355,14 @@ load_conv_function51932(); len = RSTRING_LEN(vstr); size = 0; - hr = pIMultiLanguage2->lpVtbl->ConvertStringToUnicode(pIMultiLanguage2, + hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, &dw, cp, RSTRING_PTR(vstr), &len, NULL, &size); if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert CP%d to Unicode", cp); } pw = SysAllocStringLen(NULL, size); len = RSTRING_LEN(vstr); - hr = pIMultiLanguage2->lpVtbl->ConvertStringToUnicode(pIMultiLanguage2, + hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, &dw, cp, RSTRING_PTR(vstr), &len, pw, &size); if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert CP%d to Unicode", cp); @@ -1372,13 +1387,13 @@ if (cWIN32OLE_cp == 51932) { load_conv_function51932(); size = 0; - hr = pIMultiLanguage2->lpVtbl->ConvertStringToUnicode(pIMultiLanguage2, + hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, &dw, cWIN32OLE_cp, pm, &n, NULL, &size); if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert CP%d to Unicode", cWIN32OLE_cp); } pw = SysAllocStringLen(NULL, size); - hr = pIMultiLanguage2->lpVtbl->ConvertStringToUnicode(pIMultiLanguage2, + hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, &dw, cWIN32OLE_cp, pm, &n, pw, &size); if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert CP%d to Unicode", cWIN32OLE_cp); @@ -9139,7 +9154,4 @@ init_enc2cp(); atexit((void (*)(void))free_enc2cp); ole_init_cp(); - /* - cWIN32OLE_enc = ole_cp2encoding(cWIN32OLE_cp); - */ } Index: ext/win32ole/extconf.rb =================================================================== --- ext/win32ole/extconf.rb (revision 19781) +++ ext/win32ole/extconf.rb (revision 19782) @@ -24,6 +24,9 @@ have_library("kernel32") and have_library("advapi32") and have_header("windows.h") + unless have_type("IMultiLanguage2", "mlang.h") + have_type("IMultiLanguage", "mlang.h") + end create_makefile("win32ole") create_docfile(SRCFILES) else -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/