mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/win32ole/win32ole.c: add WIN32OLE.locale=, WIN32OLE.locale,
WIN32OLE_VARIANT#vartype. * test/win32ole/test_win32ole.rb: add test for WIN32OLE.locale=, WIN32OLE.locale. * test/win32ole/test_win32ole_variant.rb: add test for WIN32OLE_VARIANT#vartype. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
024c694c95
commit
883f34f777
4 changed files with 178 additions and 21 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
Mon Jan 29 21:32:37 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
|
||||||
|
|
||||||
|
* ext/win32ole/win32ole.c: add WIN32OLE.locale=, WIN32OLE.locale,
|
||||||
|
WIN32OLE_VARIANT#vartype.
|
||||||
|
|
||||||
|
* test/win32ole/test_win32ole.rb: add test for WIN32OLE.locale=,
|
||||||
|
WIN32OLE.locale.
|
||||||
|
|
||||||
|
* test/win32ole/test_win32ole_variant.rb: add test for
|
||||||
|
WIN32OLE_VARIANT#vartype.
|
||||||
|
|
||||||
Mon Jan 29 14:14:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Mon Jan 29 14:14:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* tool/parse.rb: replace YARVCore by VM class.
|
* tool/parse.rb: replace YARVCore by VM class.
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
|
|
||||||
#define WC2VSTR(x) ole_wc2vstr((x), TRUE)
|
#define WC2VSTR(x) ole_wc2vstr((x), TRUE)
|
||||||
|
|
||||||
#define WIN32OLE_VERSION "0.8.9"
|
#define WIN32OLE_VERSION "0.9.0"
|
||||||
|
|
||||||
typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)
|
typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)
|
||||||
(REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);
|
(REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);
|
||||||
|
@ -156,13 +156,16 @@ static VALUE ary_ole_event;
|
||||||
static ID id_events;
|
static ID id_events;
|
||||||
static BOOL g_ole_initialized = FALSE;
|
static BOOL g_ole_initialized = FALSE;
|
||||||
static BOOL g_cp_installed = FALSE;
|
static BOOL g_cp_installed = FALSE;
|
||||||
|
static BOOL g_lcid_installed = FALSE;
|
||||||
static HINSTANCE ghhctrl = NULL;
|
static HINSTANCE ghhctrl = NULL;
|
||||||
static HINSTANCE gole32 = NULL;
|
static HINSTANCE gole32 = NULL;
|
||||||
static FNCOCREATEINSTANCEEX *gCoCreateInstanceEx = NULL;
|
static FNCOCREATEINSTANCEEX *gCoCreateInstanceEx = NULL;
|
||||||
static VALUE com_hash;
|
static VALUE com_hash;
|
||||||
static IDispatchVtbl com_vtbl;
|
static IDispatchVtbl com_vtbl;
|
||||||
static UINT cWIN32OLE_cp = CP_ACP;
|
static UINT cWIN32OLE_cp = CP_ACP;
|
||||||
static UINT g_cp_to_check = CP_ACP;
|
static LCID cWIN32OLE_lcid = LOCALE_SYSTEM_DEFAULT;
|
||||||
|
static UINT g_cp_to_check = CP_ACP;
|
||||||
|
static char g_lcid_to_check[8 + 1];
|
||||||
static VARTYPE g_nil_to = VT_ERROR;
|
static VARTYPE g_nil_to = VT_ERROR;
|
||||||
|
|
||||||
struct oledata {
|
struct oledata {
|
||||||
|
@ -273,6 +276,10 @@ static VALUE fole_s_get_code_page(VALUE self);
|
||||||
static BOOL CALLBACK installed_code_page_proc(LPTSTR str);
|
static BOOL CALLBACK installed_code_page_proc(LPTSTR str);
|
||||||
static BOOL code_page_installed(UINT cp);
|
static BOOL code_page_installed(UINT cp);
|
||||||
static VALUE fole_s_set_code_page(VALUE self, VALUE vcp);
|
static VALUE fole_s_set_code_page(VALUE self, VALUE vcp);
|
||||||
|
static VALUE fole_s_get_locale(VALUE self);
|
||||||
|
static BOOL CALLBACK installed_lcid_proc(LPTSTR str);
|
||||||
|
static BOOL lcid_installed(LCID lcid);
|
||||||
|
static VALUE fole_s_set_locale(VALUE self, VALUE vlcid);
|
||||||
static VALUE fole_s_create_guid(VALUE self);
|
static VALUE fole_s_create_guid(VALUE self);
|
||||||
static VALUE fole_initialize(int argc, VALUE *argv, VALUE self);
|
static VALUE fole_initialize(int argc, VALUE *argv, VALUE self);
|
||||||
static VALUE hash2named_arg(VALUE pair, struct oleparam* pOp);
|
static VALUE hash2named_arg(VALUE pair, struct oleparam* pOp);
|
||||||
|
@ -447,6 +454,7 @@ static void olevariant_free(struct olevariantdata *pvar);
|
||||||
static VALUE folevariant_s_allocate(VALUE klass);
|
static VALUE folevariant_s_allocate(VALUE klass);
|
||||||
static VALUE folevariant_initialize(VALUE self, VALUE args);
|
static VALUE folevariant_initialize(VALUE self, VALUE args);
|
||||||
static VALUE folevariant_value(VALUE self);
|
static VALUE folevariant_value(VALUE self);
|
||||||
|
static VALUE folevariant_vartype(VALUE self);
|
||||||
|
|
||||||
typedef struct _Win32OLEIDispatch
|
typedef struct _Win32OLEIDispatch
|
||||||
{
|
{
|
||||||
|
@ -735,7 +743,7 @@ ole_hresult2msg(HRESULT hr)
|
||||||
dwCount = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
dwCount = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
FORMAT_MESSAGE_FROM_SYSTEM |
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
FORMAT_MESSAGE_IGNORE_INSERTS,
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
NULL, hr, LOCALE_SYSTEM_DEFAULT,
|
NULL, hr, cWIN32OLE_lcid,
|
||||||
(LPTSTR)&p_msg, 0, NULL);
|
(LPTSTR)&p_msg, 0, NULL);
|
||||||
if (dwCount > 0) {
|
if (dwCount > 0) {
|
||||||
term = p_msg + strlen(p_msg);
|
term = p_msg + strlen(p_msg);
|
||||||
|
@ -1023,7 +1031,7 @@ ole_set_safe_array_with_type(long n, SAFEARRAY *psa, long *pid, long *pub, VALUE
|
||||||
VariantInit(&vart);
|
VariantInit(&vart);
|
||||||
if (vtype != V_VT(&var)) {
|
if (vtype != V_VT(&var)) {
|
||||||
hr = VariantChangeTypeEx(&vart, &var,
|
hr = VariantChangeTypeEx(&vart, &var,
|
||||||
LOCALE_SYSTEM_DEFAULT, 0, (VARTYPE)(vtype & ~VT_BYREF));
|
cWIN32OLE_lcid, 0, (VARTYPE)(vtype & ~VT_BYREF));
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
ole_raise(hr, rb_eRuntimeError, "failed to change type");
|
ole_raise(hr, rb_eRuntimeError, "failed to change type");
|
||||||
}
|
}
|
||||||
|
@ -1404,7 +1412,7 @@ ole_val2olevariantdata(VALUE val, VARTYPE vtype, struct olevariantdata *pvar)
|
||||||
} else {
|
} else {
|
||||||
VariantInit(&var);
|
VariantInit(&var);
|
||||||
hr = VariantChangeTypeEx(&(var), &(pvar->realvar),
|
hr = VariantChangeTypeEx(&(var), &(pvar->realvar),
|
||||||
LOCALE_SYSTEM_DEFAULT, 0, (VARTYPE)(vtype & ~VT_BYREF));
|
cWIN32OLE_lcid, 0, (VARTYPE)(vtype & ~VT_BYREF));
|
||||||
if (SUCCEEDED(hr)) {
|
if (SUCCEEDED(hr)) {
|
||||||
VariantClear(&(pvar->realvar));
|
VariantClear(&(pvar->realvar));
|
||||||
hr = VariantCopy(&(pvar->realvar), &var);
|
hr = VariantCopy(&(pvar->realvar), &var);
|
||||||
|
@ -1417,7 +1425,7 @@ ole_val2olevariantdata(VALUE val, VARTYPE vtype, struct olevariantdata *pvar)
|
||||||
hr = VariantCopy(&(pvar->var), &(pvar->realvar));
|
hr = VariantCopy(&(pvar->var), &(pvar->realvar));
|
||||||
} else {
|
} else {
|
||||||
hr = VariantChangeTypeEx(&(pvar->var), &(pvar->realvar),
|
hr = VariantChangeTypeEx(&(pvar->var), &(pvar->realvar),
|
||||||
LOCALE_SYSTEM_DEFAULT, 0, vtype);
|
cWIN32OLE_lcid, 0, vtype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1677,7 +1685,7 @@ ole_variant2val(VARIANT *pvar)
|
||||||
VARIANT variant;
|
VARIANT variant;
|
||||||
VariantInit(&variant);
|
VariantInit(&variant);
|
||||||
hr = VariantChangeTypeEx(&variant, pvar,
|
hr = VariantChangeTypeEx(&variant, pvar,
|
||||||
LOCALE_SYSTEM_DEFAULT, 0, VT_BSTR);
|
cWIN32OLE_lcid, 0, VT_BSTR);
|
||||||
if (SUCCEEDED(hr) && V_VT(&variant) == VT_BSTR) {
|
if (SUCCEEDED(hr) && V_VT(&variant) == VT_BSTR) {
|
||||||
char *p = ole_wc2mb(V_BSTR(&variant));
|
char *p = ole_wc2mb(V_BSTR(&variant));
|
||||||
obj = rb_str_new2(p);
|
obj = rb_str_new2(p);
|
||||||
|
@ -2132,7 +2140,7 @@ fole_s_const_load(int argc, VALUE *argv, VALUE self)
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
OLECHAR *pBuf;
|
OLECHAR *pBuf;
|
||||||
VALUE file;
|
VALUE file;
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
|
|
||||||
rb_secure(4);
|
rb_secure(4);
|
||||||
rb_scan_args(argc, argv, "11", &ole, &klass);
|
rb_scan_args(argc, argv, "11", &ole, &klass);
|
||||||
|
@ -2399,6 +2407,69 @@ fole_s_set_code_page(VALUE self, VALUE vcp)
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE.locale -> locale id.
|
||||||
|
*
|
||||||
|
* Returns current locale id (lcid). The default locale is
|
||||||
|
* LOCALE_SYSTEM_DEFAULT.
|
||||||
|
*
|
||||||
|
* lcid = WIN32OLE.locale
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
fole_s_get_locale(VALUE self)
|
||||||
|
{
|
||||||
|
return INT2FIX(cWIN32OLE_lcid);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
CALLBACK installed_lcid_proc(LPTSTR str)
|
||||||
|
{
|
||||||
|
if (strcmp(str, g_lcid_to_check) == 0) {
|
||||||
|
g_lcid_installed = TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
lcid_installed(LCID lcid)
|
||||||
|
{
|
||||||
|
g_lcid_installed = FALSE;
|
||||||
|
snprintf(g_lcid_to_check, sizeof(g_lcid_to_check), "%0.8x", lcid);
|
||||||
|
EnumSystemLocales(installed_lcid_proc, LCID_INSTALLED);
|
||||||
|
return g_lcid_installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE.locale = lcid
|
||||||
|
*
|
||||||
|
* Sets current locale id (lcid).
|
||||||
|
*
|
||||||
|
* WIN32OLE.locale = 1033 # set locale English(U.S)
|
||||||
|
* obj = WIN32OLE_VARIANT.new("$100,000", WIN32OLE::VARIANT::VT_CY)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
fole_s_set_locale(VALUE self, VALUE vlcid)
|
||||||
|
{
|
||||||
|
LCID lcid = FIX2INT(vlcid);
|
||||||
|
if (lcid_installed(lcid)) {
|
||||||
|
cWIN32OLE_lcid = lcid;
|
||||||
|
} else {
|
||||||
|
switch (lcid) {
|
||||||
|
case LOCALE_SYSTEM_DEFAULT:
|
||||||
|
case LOCALE_USER_DEFAULT:
|
||||||
|
cWIN32OLE_lcid = lcid;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rb_raise(eWIN32OLERuntimeError, "not installed locale: %d", lcid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* WIN32OLE.create_guid
|
* WIN32OLE.create_guid
|
||||||
|
@ -2585,7 +2656,7 @@ set_argv(VARIANTARG* realargs, unsigned int beg, unsigned int end)
|
||||||
static VALUE
|
static VALUE
|
||||||
ole_invoke(int argc, VALUE *argv, VALUE self, USHORT wFlags, BOOL is_bracket)
|
ole_invoke(int argc, VALUE *argv, VALUE self, USHORT wFlags, BOOL is_bracket)
|
||||||
{
|
{
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
struct oledata *pole;
|
struct oledata *pole;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
VALUE cmd;
|
VALUE cmd;
|
||||||
|
@ -2892,7 +2963,7 @@ ole_invoke2(VALUE self, VALUE dispid, VALUE args, VALUE types, USHORT dispkind)
|
||||||
if (v != VT_VARIANT)
|
if (v != VT_VARIANT)
|
||||||
{
|
{
|
||||||
VariantChangeTypeEx(&velem, &velem,
|
VariantChangeTypeEx(&velem, &velem,
|
||||||
LOCALE_SYSTEM_DEFAULT, 0, v);
|
cWIN32OLE_lcid, 0, v);
|
||||||
}
|
}
|
||||||
switch (v)
|
switch (v)
|
||||||
{
|
{
|
||||||
|
@ -2931,7 +3002,7 @@ ole_invoke2(VALUE self, VALUE dispid, VALUE args, VALUE types, USHORT dispkind)
|
||||||
if ((vt & (~VT_BYREF)) != VT_VARIANT)
|
if ((vt & (~VT_BYREF)) != VT_VARIANT)
|
||||||
{
|
{
|
||||||
hr = VariantChangeTypeEx(&realargs[i], &realargs[i],
|
hr = VariantChangeTypeEx(&realargs[i], &realargs[i],
|
||||||
LOCALE_SYSTEM_DEFAULT, 0,
|
cWIN32OLE_lcid, 0,
|
||||||
(VARTYPE)(vt & (~VT_BYREF)));
|
(VARTYPE)(vt & (~VT_BYREF)));
|
||||||
if (hr != S_OK)
|
if (hr != S_OK)
|
||||||
{
|
{
|
||||||
|
@ -2987,7 +3058,7 @@ ole_invoke2(VALUE self, VALUE dispid, VALUE args, VALUE types, USHORT dispkind)
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = pole->pDispatch->lpVtbl->Invoke(pole->pDispatch, NUM2INT(dispid),
|
hr = pole->pDispatch->lpVtbl->Invoke(pole->pDispatch, NUM2INT(dispid),
|
||||||
&IID_NULL, LOCALE_SYSTEM_DEFAULT,
|
&IID_NULL, cWIN32OLE_lcid,
|
||||||
dispkind,
|
dispkind,
|
||||||
&dispParams, &result,
|
&dispParams, &result,
|
||||||
&excepinfo, &argErr);
|
&excepinfo, &argErr);
|
||||||
|
@ -3144,7 +3215,7 @@ ole_propertyput(VALUE self, VALUE property, VALUE value)
|
||||||
VARIANTARG propertyValue[2];
|
VARIANTARG propertyValue[2];
|
||||||
OLECHAR* pBuf[1];
|
OLECHAR* pBuf[1];
|
||||||
VALUE v;
|
VALUE v;
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
dispParams.rgdispidNamedArgs = &dispIDParam;
|
dispParams.rgdispidNamedArgs = &dispIDParam;
|
||||||
dispParams.rgvarg = propertyValue;
|
dispParams.rgvarg = propertyValue;
|
||||||
dispParams.cNamedArgs = 1;
|
dispParams.cNamedArgs = 1;
|
||||||
|
@ -3247,7 +3318,7 @@ ole_ienum_free(VALUE pEnumV)
|
||||||
static VALUE
|
static VALUE
|
||||||
fole_each(VALUE self)
|
fole_each(VALUE self)
|
||||||
{
|
{
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
|
|
||||||
struct oledata *pole;
|
struct oledata *pole;
|
||||||
|
|
||||||
|
@ -3470,7 +3541,7 @@ typeinfo_from_ole(struct oledata *pole, ITypeInfo **ppti)
|
||||||
VALUE type;
|
VALUE type;
|
||||||
UINT i;
|
UINT i;
|
||||||
UINT count;
|
UINT count;
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
HRESULT hr = pole->pDispatch->lpVtbl->GetTypeInfo(pole->pDispatch,
|
HRESULT hr = pole->pDispatch->lpVtbl->GetTypeInfo(pole->pDispatch,
|
||||||
0, lcid, &pTypeInfo);
|
0, lcid, &pTypeInfo);
|
||||||
if(FAILED(hr)) {
|
if(FAILED(hr)) {
|
||||||
|
@ -3626,7 +3697,7 @@ fole_type(VALUE self)
|
||||||
ITypeInfo *pTypeInfo;
|
ITypeInfo *pTypeInfo;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
struct oledata *pole;
|
struct oledata *pole;
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
VALUE type = Qnil;
|
VALUE type = Qnil;
|
||||||
|
|
||||||
OLEData_Get_Struct(self, pole);
|
OLEData_Get_Struct(self, pole);
|
||||||
|
@ -3715,7 +3786,7 @@ fole_typelib(VALUE self)
|
||||||
struct oledata *pole;
|
struct oledata *pole;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
ITypeInfo *pTypeInfo;
|
ITypeInfo *pTypeInfo;
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
VALUE vtlib = Qnil;
|
VALUE vtlib = Qnil;
|
||||||
|
|
||||||
OLEData_Get_Struct(self, pole);
|
OLEData_Get_Struct(self, pole);
|
||||||
|
@ -6735,7 +6806,7 @@ find_iid(VALUE ole, char *pitf, IID *piid, ITypeInfo **ppTypeInfo)
|
||||||
char *pstr;
|
char *pstr;
|
||||||
|
|
||||||
BOOL is_found = FALSE;
|
BOOL is_found = FALSE;
|
||||||
LCID lcid = LOCALE_SYSTEM_DEFAULT;
|
LCID lcid = cWIN32OLE_lcid;
|
||||||
|
|
||||||
OLEData_Get_Struct(ole, pole);
|
OLEData_Get_Struct(ole, pole);
|
||||||
|
|
||||||
|
@ -7224,6 +7295,23 @@ folevariant_value(VALUE self)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* call-seq:
|
||||||
|
* WIN32OLE_VARIANT#vartype #=> OLE variant type.
|
||||||
|
*
|
||||||
|
* Returns OLE variant type.
|
||||||
|
* obj = WIN32OLE_VARIANT.new("string")
|
||||||
|
* obj.vartype # => WIN32OLE::VARIANT::VT_BSTR
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static VALUE
|
||||||
|
folevariant_vartype(VALUE self)
|
||||||
|
{
|
||||||
|
struct olevariantdata *pvar;
|
||||||
|
Data_Get_Struct(self, struct olevariantdata, pvar);
|
||||||
|
return INT2FIX(V_VT(&pvar->var));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Init_win32ole()
|
Init_win32ole()
|
||||||
{
|
{
|
||||||
|
@ -7255,6 +7343,8 @@ Init_win32ole()
|
||||||
rb_define_singleton_method(cWIN32OLE, "ole_show_help", fole_s_show_help, -1);
|
rb_define_singleton_method(cWIN32OLE, "ole_show_help", fole_s_show_help, -1);
|
||||||
rb_define_singleton_method(cWIN32OLE, "codepage", fole_s_get_code_page, 0);
|
rb_define_singleton_method(cWIN32OLE, "codepage", fole_s_get_code_page, 0);
|
||||||
rb_define_singleton_method(cWIN32OLE, "codepage=", fole_s_set_code_page, 1);
|
rb_define_singleton_method(cWIN32OLE, "codepage=", fole_s_set_code_page, 1);
|
||||||
|
rb_define_singleton_method(cWIN32OLE, "locale", fole_s_get_locale, 0);
|
||||||
|
rb_define_singleton_method(cWIN32OLE, "locale=", fole_s_set_locale, 1);
|
||||||
rb_define_singleton_method(cWIN32OLE, "create_guid", fole_s_create_guid, 0);
|
rb_define_singleton_method(cWIN32OLE, "create_guid", fole_s_create_guid, 0);
|
||||||
|
|
||||||
rb_define_method(cWIN32OLE, "invoke", fole_invoke, -1);
|
rb_define_method(cWIN32OLE, "invoke", fole_invoke, -1);
|
||||||
|
@ -7287,6 +7377,7 @@ Init_win32ole()
|
||||||
|
|
||||||
rb_define_const(cWIN32OLE, "VERSION", rb_str_new2(WIN32OLE_VERSION));
|
rb_define_const(cWIN32OLE, "VERSION", rb_str_new2(WIN32OLE_VERSION));
|
||||||
rb_define_const(cWIN32OLE, "ARGV", rb_ary_new());
|
rb_define_const(cWIN32OLE, "ARGV", rb_ary_new());
|
||||||
|
|
||||||
rb_define_const(cWIN32OLE, "CP_ACP", INT2FIX(CP_ACP));
|
rb_define_const(cWIN32OLE, "CP_ACP", INT2FIX(CP_ACP));
|
||||||
rb_define_const(cWIN32OLE, "CP_OEMCP", INT2FIX(CP_OEMCP));
|
rb_define_const(cWIN32OLE, "CP_OEMCP", INT2FIX(CP_OEMCP));
|
||||||
rb_define_const(cWIN32OLE, "CP_MACCP", INT2FIX(CP_MACCP));
|
rb_define_const(cWIN32OLE, "CP_MACCP", INT2FIX(CP_MACCP));
|
||||||
|
@ -7295,6 +7386,9 @@ Init_win32ole()
|
||||||
rb_define_const(cWIN32OLE, "CP_UTF7", INT2FIX(CP_UTF7));
|
rb_define_const(cWIN32OLE, "CP_UTF7", INT2FIX(CP_UTF7));
|
||||||
rb_define_const(cWIN32OLE, "CP_UTF8", INT2FIX(CP_UTF8));
|
rb_define_const(cWIN32OLE, "CP_UTF8", INT2FIX(CP_UTF8));
|
||||||
|
|
||||||
|
rb_define_const(cWIN32OLE, "LOCALE_SYSTEM_DEFAULT", INT2FIX(LOCALE_SYSTEM_DEFAULT));
|
||||||
|
rb_define_const(cWIN32OLE, "LOCALE_USER_DEFAULT", INT2FIX(LOCALE_USER_DEFAULT));
|
||||||
|
|
||||||
mWIN32OLE_VARIANT = rb_define_module_under(cWIN32OLE, "VARIANT");
|
mWIN32OLE_VARIANT = rb_define_module_under(cWIN32OLE, "VARIANT");
|
||||||
rb_define_const(mWIN32OLE_VARIANT, "VT_EMPTY", INT2FIX(VT_EMPTY));
|
rb_define_const(mWIN32OLE_VARIANT, "VT_EMPTY", INT2FIX(VT_EMPTY));
|
||||||
rb_define_const(mWIN32OLE_VARIANT, "VT_NULL", INT2FIX(VT_NULL));
|
rb_define_const(mWIN32OLE_VARIANT, "VT_NULL", INT2FIX(VT_NULL));
|
||||||
|
@ -7416,6 +7510,7 @@ Init_win32ole()
|
||||||
rb_define_alloc_func(cWIN32OLE_VARIANT, folevariant_s_allocate);
|
rb_define_alloc_func(cWIN32OLE_VARIANT, folevariant_s_allocate);
|
||||||
rb_define_method(cWIN32OLE_VARIANT, "initialize", folevariant_initialize, -2);
|
rb_define_method(cWIN32OLE_VARIANT, "initialize", folevariant_initialize, -2);
|
||||||
rb_define_method(cWIN32OLE_VARIANT, "value", folevariant_value, 0);
|
rb_define_method(cWIN32OLE_VARIANT, "value", folevariant_value, 0);
|
||||||
|
rb_define_method(cWIN32OLE_VARIANT, "vartype", folevariant_vartype, 0);
|
||||||
rb_define_const(cWIN32OLE_VARIANT, "Empty", rb_funcall(cWIN32OLE_VARIANT, rb_intern("new"), 2, Qnil, INT2FIX(VT_EMPTY)));
|
rb_define_const(cWIN32OLE_VARIANT, "Empty", rb_funcall(cWIN32OLE_VARIANT, rb_intern("new"), 2, Qnil, INT2FIX(VT_EMPTY)));
|
||||||
rb_define_const(cWIN32OLE_VARIANT, "Null", rb_funcall(cWIN32OLE_VARIANT, rb_intern("new"), 2, Qnil, INT2FIX(VT_NULL)));
|
rb_define_const(cWIN32OLE_VARIANT, "Null", rb_funcall(cWIN32OLE_VARIANT, rb_intern("new"), 2, Qnil, INT2FIX(VT_NULL)));
|
||||||
rb_define_const(cWIN32OLE_VARIANT, "Nothing", rb_funcall(cWIN32OLE_VARIANT, rb_intern("new"), 2, Qnil, INT2FIX(VT_DISPATCH)));
|
rb_define_const(cWIN32OLE_VARIANT, "Nothing", rb_funcall(cWIN32OLE_VARIANT, rb_intern("new"), 2, Qnil, INT2FIX(VT_DISPATCH)));
|
||||||
|
|
|
@ -296,6 +296,38 @@ if defined?(WIN32OLE)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_s_locale
|
||||||
|
assert_equal(WIN32OLE::LOCALE_SYSTEM_DEFAULT, WIN32OLE.locale)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_s_locale_set
|
||||||
|
begin
|
||||||
|
WIN32OLE.locale = 1041
|
||||||
|
assert_equal(1041, WIN32OLE.locale)
|
||||||
|
WIN32OLE.locale = WIN32OLE::LOCALE_SYSTEM_DEFAULT
|
||||||
|
assert_raise(WIN32OLERuntimeError) {
|
||||||
|
WIN32OLE.locale = 111
|
||||||
|
}
|
||||||
|
assert_equal(WIN32OLE::LOCALE_SYSTEM_DEFAULT, WIN32OLE.locale)
|
||||||
|
ensure
|
||||||
|
WIN32OLE.locale = WIN32OLE::LOCALE_SYSTEM_DEFAULT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_s_locale_change
|
||||||
|
begin
|
||||||
|
WIN32OLE.locale = 0x0411
|
||||||
|
obj = WIN32OLE_VARIANT.new("\\100,000", WIN32OLE::VARIANT::VT_CY)
|
||||||
|
assert_equal("100000", obj.value)
|
||||||
|
|
||||||
|
WIN32OLE.locale = 1033
|
||||||
|
obj = WIN32OLE_VARIANT.new("$100,000", WIN32OLE::VARIANT::VT_CY)
|
||||||
|
assert_equal("100000", obj.value)
|
||||||
|
ensure
|
||||||
|
WIN32OLE.locale = WIN32OLE::LOCALE_SYSTEM_DEFAULT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_const_CP_ACP
|
def test_const_CP_ACP
|
||||||
assert_equal(0, WIN32OLE::CP_ACP)
|
assert_equal(0, WIN32OLE::CP_ACP)
|
||||||
end
|
end
|
||||||
|
@ -323,6 +355,14 @@ if defined?(WIN32OLE)
|
||||||
def test_const_CP_UTF8
|
def test_const_CP_UTF8
|
||||||
assert_equal(65001, WIN32OLE::CP_UTF8)
|
assert_equal(65001, WIN32OLE::CP_UTF8)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_const_LOCALE_SYSTEM_DEFAULT
|
||||||
|
assert_equal(0x0800, WIN32OLE::LOCALE_SYSTEM_DEFAULT);
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_const_LOCALE_USER_DEFAULT
|
||||||
|
assert_equal(0x0400, WIN32OLE::LOCALE_USER_DEFAULT);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# test of subclass of WIN32OLE
|
# test of subclass of WIN32OLE
|
||||||
|
|
|
@ -81,8 +81,13 @@ if defined?(WIN32OLE_VARIANT)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_conversion_str2cy
|
def test_conversion_str2cy
|
||||||
obj = WIN32OLE_VARIANT.new("\\10,000", WIN32OLE::VARIANT::VT_CY)
|
begin
|
||||||
assert_equal("10000", obj.value)
|
WIN32OLE.locale = 0x0411 # set locale Japanese
|
||||||
|
obj = WIN32OLE_VARIANT.new("\\10,000", WIN32OLE::VARIANT::VT_CY)
|
||||||
|
assert_equal("10000", obj.value)
|
||||||
|
ensure
|
||||||
|
WIN32OLE.locale = WIN32OLE::LOCALE_SYSTEM_DEFAULT
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_create_vt_array
|
def test_create_vt_array
|
||||||
|
@ -105,6 +110,7 @@ if defined?(WIN32OLE_VARIANT)
|
||||||
assert_equal([65, 0].pack("C*"), obj.value)
|
assert_equal([65, 0].pack("C*"), obj.value)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_create_vt_array_int
|
def test_create_vt_array_int
|
||||||
obj = WIN32OLE_VARIANT.new([65, 0], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1)
|
obj = WIN32OLE_VARIANT.new([65, 0], WIN32OLE::VARIANT::VT_ARRAY|WIN32OLE::VARIANT::VT_UI1)
|
||||||
assert_equal([65, 0].pack("C*"), obj.value)
|
assert_equal([65, 0].pack("C*"), obj.value)
|
||||||
|
@ -126,6 +132,11 @@ if defined?(WIN32OLE_VARIANT)
|
||||||
assert_equal("Str", obj.value);
|
assert_equal("Str", obj.value);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_vartype
|
||||||
|
obj = WIN32OLE_VARIANT.new("Str")
|
||||||
|
assert_equal(WIN32OLE::VARIANT::VT_BSTR, obj.vartype)
|
||||||
|
end
|
||||||
|
|
||||||
def test_c_nothing
|
def test_c_nothing
|
||||||
assert_nil(WIN32OLE_VARIANT::Nothing.value)
|
assert_nil(WIN32OLE_VARIANT::Nothing.value)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue