From 6e0b3ca606ce09558ff6f5e6549230b254665da0 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 26 Jan 2004 02:35:30 +0000 Subject: * 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/trunk@5553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/win32ole/extconf.rb | 2 ++ ext/win32ole/win32ole.c | 32 ++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) (limited to 'ext/win32ole') 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 @@ -1685,6 +1685,22 @@ hash2named_arg(pair, pOp) return Qnil; } +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; @@ -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); -- cgit v1.2.3