[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]