diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-01-26 02:35:30 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-01-26 02:35:30 +0000 |
commit | 6341bbe46c97a0e478a6ce12cddce74e31139512 (patch) | |
tree | 1c4293d59af9ea74600b5007d98855aecf71cdc2 /ext/win32ole | |
parent | acebde46a3e0b68c70aefea370c5969ec414b2ab (diff) |
* ext/extmk.rb: Makefiles should depend on also rbconfig.rb.
(ruby-bugs:PR#1256)
* ext/win32ole/win32ole.c (set_argv): set real arguments to
WIN32OLE::ARGV. [ruby-list:39073]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@5553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/win32ole')
-rw-r--r-- | ext/win32ole/extconf.rb | 2 | ||||
-rw-r--r-- | ext/win32ole/win32ole.c | 32 |
2 files changed, 20 insertions, 14 deletions
diff --git a/ext/win32ole/extconf.rb b/ext/win32ole/extconf.rb index 4afe1117eb..c989267733 100644 --- a/ext/win32ole/extconf.rb +++ b/ext/win32ole/extconf.rb @@ -5,11 +5,13 @@ #---------------------------------- require 'mkmf' +dir_config("win32") def create_win32ole_makefile if have_library("ole32") and have_library("oleaut32") and have_library("uuid") and have_library("user32") and + have_library("kernel32") and have_library("advapi32") and have_header("windows.h") create_makefile("win32ole") diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c index 3b143ebd07..e96c37a559 100644 --- a/ext/win32ole/win32ole.c +++ b/ext/win32ole/win32ole.c @@ -1686,6 +1686,22 @@ hash2named_arg(pair, pOp) } static VALUE +set_argv(realargs, beg, end) + VARIANTARG* realargs; + unsigned int beg, end; +{ + VALUE argv = rb_const_get(cWIN32OLE, rb_intern("ARGV")); + + Check_Type(argv, T_ARRAY); + rb_ary_clear(argv); + while (--end >= beg) { + rb_ary_push(argv, ole_variant2val(&realargs[end])); + VariantClear(&realargs[end]); + } + return argv; +} + +static VALUE ole_invoke(argc, argv, self, wFlags) int argc; VALUE *argv; @@ -1707,7 +1723,6 @@ ole_invoke(argc, argv, self, wFlags) DISPID* pDispID; EXCEPINFO excepinfo; VARIANT result; - VALUE args; VARIANTARG* realargs = NULL; unsigned int argErr = 0; unsigned int i; @@ -1847,13 +1862,7 @@ ole_invoke(argc, argv, self, wFlags) } /* clear dispatch parameter */ if(op.dp.cArgs > cNamedArgs) { - args = rb_cvar_get(cWIN32OLE, rb_intern("ARGV")); - rb_funcall(args, rb_intern("clear"), 0); - for(i = cNamedArgs; i < op.dp.cArgs; i++) { - n = op.dp.cArgs - i + cNamedArgs - 1; - rb_ary_push(args, ole_variant2val(&realargs[n])); - VariantClear(&realargs[n]); - } + set_argv(realargs, cNamedArgs, op.dp.cArgs); } else { for(i = 0; i < op.dp.cArgs; i++) { @@ -2066,12 +2075,7 @@ ole_invoke2(self, dispid, args, types, dispkind) /* clear dispatch parameter */ if(dispParams.cArgs > 0) { - VALUE argv = rb_cvar_get(cWIN32OLE, rb_intern("ARGV")); - rb_funcall(argv, rb_intern("clear"), 0); - for(i = dispParams.cArgs - 1; i >= 0; i--) { - rb_ary_push(argv, ole_variant2val(&realargs[i])); - VariantClear(&realargs[i]); - } + set_argv(realargs, 0, dispParams.cArgs); } obj = ole_variant2val(&result); |