[BUG] test_win32ole_event.rb in trunk

e$B=uED$G$9!#e(B

e$B$A$g$C$H$h$/$o$+$i$J$$$N$G65$($F$/$@$5$$!#e(B

cygwine$B4D6-$G!"e(Bmake test-all TESTS=win32ole
e$B$H$9$k$H0J2<$N$h$&$Ke(BBUGe$B$K$J$j$^$7$?!#e(B

/work/svn/ruby/trunk/test/win32ole/test_win32ole_event.rb:129:
[BUG] object allocation during garbage collection phase

test_win32ole_event.rb e$B$Ne(B
129e$B9TL$Oe(BGC.starte$B$r%3!<%k$7$F$$$k$@$1$G$9!#e(B

e$B%?%$%_%s%0E*$K$O!"e(B

* gc.c (rb_newobj): prohibit call of rb_newobj() during gc when
  USE_VALUE_CACHE is not defined (normal case).

e$B$NJQ99$,F~$C$F$+$i$J$N$G$9$,!"$3$NJQ99$,0-$$$H$O9M$($K$/$$$N$G!“e(B
WIN32OLE_EVENTe$B$N<BAu$NJ}$K85!9LdBj$,$”$C$?$s$8$c$J$$$+$H5?$C$F$$$^$9!#e(B
e$B$?$@!"$I$3$,0-$$$N$+!":#$N$H$3$m8+Ev$,$D$-$^$;$s!#e(B

GC.starte$B$,%3!<%k$5$l$?$H$3$m$G!"$3$Ne(BBUGe$B$,H/@8$9$k$N$Oe(B
e$B3HD%%i%$%V%i%j$H$7$F!"$I$&$$$&<BAu$r$7$?>l9g$,9M$($i$l$k$G$7$g$&$+!)e(B

e$B$"$H!"e(B[BUG]e$B$N=PNO$,1d!97+$jJV$5$l$kF0$-$,5$$K$J$C$F$^$9!#e(B

WIN32OLE_EVENTe$B$O54Lg$@!#e(B
e$B=uEDe(B e$B2m5*e(B

e$B$J$+$@$G$9!#e(B

At Mon, 30 Jun 2008 23:54:26 +0900,
Masaki S. wrote in [ruby-dev:35278]:

GC.starte$B$,%3!<%k$5$l$?$H$3$m$G!"$3$Ne(BBUGe$B$,H/@8$9$k$N$Oe(B
e$B3HD%%i%$%V%i%j$H$7$F!"$I$&$$$&<BAu$r$7$?>l9g$,9M$($i$l$k$G$7$g$&$+!)e(B

T_DATAe$B$Ne(Bdfreee$B4X?t$NCf$G!"%*%V%8%’%/%H$r3NJ]$7$h$&$H$7$?>l9g$G$9e(B
e$B$,!"$A$g$C$H8+$?8B$j$G$O$=$&$$$&$H$3$m$O8+IU$+$j$^$;$s$G$7$?!#%Ge(B
e$B%P%C%,$G%P%C%/%H%l!<%9$r8+$l$P$I$3$KLdBj$,$"$k$+$o$+$k$N$G$O$J$$e(B
e$B$+$H;W$$$^$9!#e(B

e$B$"$H!"e(B[BUG]e$B$N=PNO$,1d!97+$jJV$5$l$kF0$-$,5$$K$J$C$F$^$9!#e(B

e$B$3$l$O!"e(Brb_vm_bugreport()e$B$NCf$G%9%?%C%/%H%l!<%9$N$?$a$K$^$?%*%Ve(B
e$B%8%’%/%H$r:n$C$F$7$^$&$+$i$G$9$M!#D>$7$^$7$?!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

e$B0zMQ=g$r$$$8$j$^$9!#e(B

In message “[ruby-dev:35278] [BUG] test_win32ole_event.rb in trunk”
on Jun.30,2008 23:54:26, [email protected] wrote:

e$B%?%$%_%s%0E*$K$O!"e(B

* gc.c (rb_newobj): prohibit call of rb_newobj() during gc when
  USE_VALUE_CACHE is not defined (normal case).

e$B$NJQ99$,F~$C$F$+$i$J$N$G$9$,!“$3$NJQ99$,0-$$$H$O9M$($K$/$$$N$G!“e(B
WIN32OLE_EVENTe$B$N<BAu$NJ}$K85!9LdBj$,$”$C$?$s$8$c$J$$$+$H5?$C$F$$$^$9!#e(B
e$B$?$@!”$I$3$,0-$$$N$+!":#$N$H$3$m8+Ev$,$D$-$^$;$s!#e(B

e$B$b$H$b$H!“$3$N%A%'%C%/$Oe(B1.8e$B7O$K$”$C$?$b$N$G!“e(B1.9.0-2e$B$,=P$k$Ae(B
e$B$g$C$HA0$Ke(B1.9e$B$K$b%^!<%8$5$l$^$7$?!#e(B
e$B$,!”<B$O$3$N%^!<%8$,%_%9$C$F$$$F!“8=>uM-8z$G$J$$e(B#ife$B%V%m%C%/$Ne(B
e$BCf$K$”$C$?$N$G!">e5-$Ne(Bcommite$B$GK\Mh$N0U?^DL$j%A%'%C%/$,9T$o$le(B
e$B$k$h$&$K$J$j$^$7$?!#e(B

e$B$?$@!“<B:]$K$3$N%A%'%C%/$rM-8z$K$7$F$_$k$He(Brubye$BK\BN$K$bLdBj$,e(B
e$B$”$k$3$H$,H=L@$7$?$?$a!"e(Br17732e$B$*$h$Se(Br17737e$B$GBP1~$,2C$($i$l$^e(B
e$B$7$?!#e(B

e$B$3$3$^$G$,:#F|e(B…e$B$8$c$J$$$J!“:rF|$N$”$i$9$8$G$9!#e(B

e$B$G!"$3$N%A%‘%C%/$,2?$r$7$F$$$k$+$H$$$&$H!"e(B[BUG]e$B%a%C%;!<%8$NDLe(B
e$B$j$G!"K\Mh6X;_$7$J$1$l$P$J$i$J$$!"e(BGCe$B<B9TCf$Ne(Brubye$B%*%V%8%’%/%He(B
e$B$N3NJ]$r8!=P$7$F$$$^$9!#e(B

GCe$B<B9TCf$Ke(Brubye$B%*%V%8%'%/%H$r3NJ]$7$F$b$&$^$/F0$$$F$7$^$&$Ne(B

e$B$O!"$?$^$?$^e(Bheap

slote$B$K6u$-$,$"$k>l9g$@$1$G!"MW$9$k$K1?$,$$e(B

e$B$$>l9g$@$1$G$9e(B(e$B$H!";d$O$3$NOC$rM}2r$7$F$$$^$9e(B)e$B!#e(B

GC.starte$B$,%3!<%k$5$l$?$H$3$m$G!“$3$Ne(BBUGe$B$,H/@8$9$k$N$Oe(B
e$B3HD%%i%$%V%i%j$H$7$F!”$I$&$$$&<BAu$r$7$?>l9g$,9M$($i$l$k$G$7$g$&$+!)e(B

GCe$B<B9TCf$H$$$&$N$O!"MW$9$k$Ke(Bmarke$BCf$^$?$Oe(Bsweepe$BCf$^$?$O%U%!%$%Je(B
e$B%i%$%6<B9TCf$G$9!#e(B
e$B$H$$$&$o$1$G!"e(Bmarke$B4X?t$^$?$Oe(Bfreee$B4X?tFb$G%a%b%j3NJ]$r9T$C$F$$e(B
e$B$k2DG=@-$,9b$$$G$9!#e(B
… e$B$,!"e(Bwin32ole.ce$B$r8+$?8B$j$@$HC1=c$K$=$s$J$3$H$r$7$F$$$k%1e(B
e$B!<%9$O$J$$$G$9$M!#e(B

e$B$"$H!"e(B[BUG]e$B$N=PNO$,1d!97+$jJV$5$l$kF0$-$,5$$K$J$C$F$^$9!#e(B

e$B;d$b$3$l$O5$$K$J$j$^$9!#e(B
e$B$J$s$Ge(Babort()e$B$G=*N;$7$F$J$$$s$@$me(B?

e$B$=$l$G$O!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:35278] [BUG] test_win32ole_event.rb in trunk”
on Jun.30,2008 23:54:26, [email protected] wrote:

e$B$NJQ99$,F~$C$F$+$i$J$N$G$9$,!“$3$NJQ99$,0-$$$H$O9M$($K$/$$$N$G!“e(B
WIN32OLE_EVENTe$B$N<BAu$NJ}$K85!9LdBj$,$”$C$?$s$8$c$J$$$+$H5?$C$F$$$^$9!#e(B
e$B$?$@!”$I$3$,0-$$$N$+!":#$N$H$3$m8+Ev$,$D$-$^$;$s!#e(B

e$B>l=j$O$o$+$j$^$7$?!#e(B
GCe$BCfe(B(e$B6qBNE*$K$Oe(Bsweepe$BCfe(B)e$B$Ke(BEVENTSINK_Invoke()e$B$,8F$P$l$F!"$=$NCfe(B
e$B$Ge(BWC2VSTR()e$B$Ge(BStringe$B$r3NJ]$7$F$$$k$N$,0z$C$+$+$C$F$$$^$9!#e(B

e$B$h$/$o$+$C$F$J$$$s$G$9$,!“e(BEVENTSINK_Invoke()e$B$J$I$OHsF14|$Ke(BWindows
e$B$+$i8F$S=P$5$l$F$$$k$s$G$7$g$&$+e(B?
e$B$@$H$9$k$H!”$3$l$i$N%3!<%k%P%C%/4X?tFb$G$Ne(Brubye$B%*%V%8%'%/%HA`e(B
e$B:n$O$A$g$C$H9M$($J$$$H$$$1$J$$$s$8$c$J$$$+$H$$$&5$$,$7$^$9!#e(B

e$B$=$l$H$b!"C1$Ke(Bfreee$B=hM}$N7k2L$H$7$Fe(BEVENTSINK_Invoke()e$B$,%3!<%ke(B
e$B%P%C%/$5$l$k$@$1$J$s$G$7$g$&$+e(B?

e$B$=$l$G$O!#e(B

e$B=uED$G$9!#e(B

U.Nakamura wrote:

e$B$G!"$3$N%A%’%C%/$,2?$r$7$F$$$k$+$H$$$&$H!"e(B[BUG]e$B%a%C%;!<%8$NDLe(B
e$B$j$G!"K\Mh6X;_$7$J$1$l$P$J$i$J$$!"e(BGCe$B<B9TCf$Ne(Brubye$B%*%V%8%’%/%He(B
e$B$N3NJ]$r8!=P$7$F$$$^$9!#e(B

GCe$B<B9TCf$Ke(Brubye$B%*%V%8%’%/%H$r3NJ]$7$F$b$&$^$/F0$$$F$7$^$&$Ne(B

e$B$O!"$?$^$?$^e(Bheap slote$B$K6u$-$,$"$k>l9g$@$1$G!"MW$9$k$K1?$,$$e(B

e$B$$>l9g$@$1$G$9e(B(e$B$H!";d$O$3$NOC$rM}2r$7$F$$$^$9e(B)e$B!#e(B

e$B2r@b$"$j$,$H$&$4$6$$$^$9!#e(B
e$B;d$b$J$s$H$J$/e(BWin32OLEe$BB&$,$J$s$+$=$N$h$&$J$d$C$A$c$$$1$J$$e(B
e$B$3$H$r$d$C$F$$$k$s$@$m$&$J$H9M$($F$$$^$7$?!#e(B

… e$B$,!"e(Bwin32ole.ce$B$r8+$?8B$j$@$HC1=c$K$=$s$J$3$H$r$7$F$$$k%1e(B
e$B!<%9$O$J$$$G$9$M!#e(B

e$B$&!<$s!#JQ$J$3$H$r$7$F$$$k$N$O3N$+$J$N$Ge(BWIN32OLE_EVENTe$B$^$o$je(B
e$B$,2x$7$$5$$,e(B…e$B!#e(B

e$B=uEDe(B e$B2m5*e(B

artone$B$G$9!#e(B

e$B$h$/$o$+$C$F$J$$$s$G$9$,!"e(BEVENTSINK_Invoke()e$B$J$I$OHsF14|$Ke(BWindows
e$B$+$i8F$S=P$5$l$F$$$k$s$G$7$g$&$+e(B?
e$B%a%C%;!<%8%]%s%W!Je(BPeekMessagee$B$H$+e(BGetMessagee$B$He(BDispatchMessagee$B$NAH$_9g$o$;!Ke(B
e$B$r8F$P$J$$8B$j$O$J$$$O$:$G$9!#>/$J$/$H$b!“e(BWin32OLEe$B$G$O$=$l0J30$G%3!<%k%P%Ce(B
e$B%/$r<u$1$^$;$s!Je(BOLEe$B%5!<%P$N<BAu$K%P%0$,$”$C$F$b!“0[$J$k%9%l%C%I$G8F$P$le(B
e$B$k$O$:!K!#e(B
e$B$@$H$9$k$H!”$3$l$i$N%3!<%k%P%C%/4X?tFb$G$Ne(Brubye$B%*%V%8%’%/%HA`e(B
e$B:n$O$A$g$C$H9M$($J$$$H$$$1$J$$$s$8$c$J$$$+$H$$$&5$$,$7$^$9!#e(B
e$B$=$l$H$b!“C1$Ke(Bfreee$B=hM}$N7k2L$H$7$Fe(BEVENTSINK_Invoke()e$B$,%3!<%ke(B
e$B%P%C%/$5$l$k$@$1$J$s$G$7$g$&$+e(B?
e$B$3$l$O$”$jF@$^$9$M!#e(B
e$B%9%?%C%/%H%l!<%9$N>e$N$[$&$O$I$&$J$C$F$$$^$9$+!)e(B

T_DATAe$B$Ne(Bdfreee$B4X?t$NCf$G!"%*%V%8%’%/%H$r3NJ]$7$h$&$H$7$?>l9g$G$9e(B
e$B$,!"$A$g$C$H8+$?8B$j$G$O$=$&$$$&$H$3$m$O8+IU$+$j$^$;$s$G$7$?!#%Ge(B
e$B%P%C%,$G%P%C%/%H%l!<%9$r8+$l$P$I$3$KLdBj$,$"$k$+$o$+$k$N$G$O$J$$e(B
e$B$+$H;W$$$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#$b$&$A$g$C$HD4$Y$F$_$^$9!#e(B

e$B$"$H!"e(B[BUG]e$B$N=PNO$,1d!97+$jJV$5$l$kF0$-$,5$$K$J$C$F$^$9!#e(B

e$B$3$l$O!"e(Brb_vm_bugreport()e$B$NCf$G%9%?%C%/%H%l!<%9$N$?$a$K$^$?%*%Ve(B
e$B%8%’%/%H$r:n$C$F$7$^$&$+$i$G$9$M!#D>$7$^$7$?!#e(B

e$B$"$H$G;n$7$F$_$^$9!#e(B
e$B$H$j$$$=$.$*Ni$^$G!#e(B

e$B=uEDe(B e$B2m5*e(B

e$B=uED$G$9!#e(B
e$BH?1~$,F_$/$F$9$$$^$;$s!#e(B

U.Nakamura wrote:

e$B>l=j$O$o$+$j$^$7$?!#e(B
GCe$BCfe(B(e$B6qBNE*$K$Oe(Bsweepe$BCfe(B)e$B$Ke(BEVENTSINK_Invoke()e$B$,8F$P$l$F!"$=$NCfe(B
e$B$Ge(BWC2VSTR()e$B$Ge(BStringe$B$r3NJ]$7$F$$$k$N$,0z$C$+$+$C$F$$$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B

e$B$h$/$o$+$C$F$J$$$s$G$9$,!"e(BEVENTSINK_Invoke()e$B$J$I$OHsF14|$Ke(BWindows
e$B$+$i8F$S=P$5$l$F$$$k$s$G$7$g$&$+e(B?

EVENTSINK_Invokee$B$O!"e(BCOMe$B%5!<%P!<B&$G2?$i$+$N%$%Y%s%H$,e(B
e$BH/@8$7$?$H$-$Ke(BCOMe$B%5!<%P!<B&$+$i8F$P$l$^$9!#e(B
e$B$J$N$G!"HsF14|$K8F$S=P$5$l$F$$$^$9!#e(B
WIN32OLE_EVENTe$B$NCf3K$K$J$j$^$9!#e(B

e$B$@$H$9$k$H!"$3$l$i$N%3!<%k%P%C%/4X?tFb$G$Ne(Brubye$B%*%V%8%’%/%HA`e(B
e$B:n$O$A$g$C$H9M$($J$$$H$$$1$J$$$s$8$c$J$$$+$H$$$&5$$,$7$^$9!#e(B

e$B$&!<$s!#e(B
e$B>e$Ne(BWC2VSTRe$B$@$1$J$i2?$H$+$J$k$G$7$g$&$1$I!"e(Brubye$B%%V%8%’%/%HA`:ne(B
e$B0l@Z6X;_$G<BAu$9$kJ}K!$O!":#$N$H$3$m;W$$$D$+$J$$$G$9!#e(B
GCe$BCf$@$C$?$ie(BGCe$B$,=
$o$k$^$GBT$D$?$a$N;EAH$_$C$FDs6!$5$l$Fe(B
e$B$$$k$s$G$7$g$&$+!)e(B
e$B$h$/$o$+$C$F$J$$$N$G$9$,!"e(BRUBY_CRITICALe$B$H$+$O;H$($k$s$G$7$g$&$+!)e(B

e$B$=$l$H$b!"C1$Ke(Bfreee$B=hM}$N7k2L$H$7$Fe(BEVENTSINK_Invoke()e$B$,%3!<%ke(B
e$B%P%C%/$5$l$k$@$1$J$s$G$7$g$&$+e(B?

e$B$3$C$A$N2DG=@-$ODc$$5$$,$7$^$9!#e(B

e$B=uEDe(B e$B2m5*e(B

artone$B$G$9!#e(B

e$B$h$/$o$+$C$F$J$$$s$G$9$,!"e(BEVENTSINK_Invoke()e$B$J$I$OHsF14|$Ke(BWindows
e$B$+$i8F$S=P$5$l$F$$$k$s$G$7$g$&$+e(B?

EVENTSINK_Invokee$B$O!"e(BCOMe$B%5!<%P!<B&$G2?$i$+$N%$%Y%s%H$,e(B
e$BH/@8$7$?$H$-$Ke(BCOMe$B%5!<%P!<B&$+$i8F$P$l$^$9!#e(B
e$B$J$N$G!"HsF14|$K8F$S=P$5$l$F$$$^$9!#e(B
WIN32OLE_EVENTe$B$NCf3K$K$J$j$^$9!#e(B
e$B$3$l$O!"0c$$$^$9!JHsF14|$N0UL#$K$b$h$j$^$9$,!K!#e(B
Win32OLEe$B$N>l9g!“e(BSTAe$B$GF0:n$7$F$$$k$N$G!”%5!<%P!<$+$i$N8F$S=P$7$K$O%a%C%;!<e(B
e$B%8%]%s%W$+$i$N%a%C%;!<%8$/$>e$2$,I,MW$H$J$j$^$9!#e(BGCe$B$Ne(BSweepe$B%U%’!<%:$G%a%Ce(B
e$B%;!<%8%]%s%W$NAH$
>e$2$,9T$o$l$k2DG=@-$O!“e(BWin32OLEe$B$N2pF~!Je(BSWine$B$J$I$r;H$Ce(B
e$B$F$$$l$PJLLdBj!K$7$+$”$j$^$;$s!#e(B
e$B>e$Ne(BWC2VSTRe$B$@$1$J$i2?$H$+$J$k$G$7$g$&$1$I!"e(Brubye$B%%V%8%’%/%HA`:ne(B
e$B0l@Z6X;_$G<BAu$9$kJ}K!$O!":#$N$H$3$m;W$$$D$+$J$$$G$9!#e(B
GCe$BCf$@$C$?$ie(BGCe$B$,=
$o$k$^$GBT$D$?$a$N;EAH$_$C$FDs6!$5$l$Fe(B
e$B$$$k$s$G$7$g$&$+!)e(B
e$B$h$/$o$+$C$F$J$$$N$G$9$,!"e(BRUBY_CRITICALe$B$H$+$O;H$($k$s$G$7$g$&$+!)e(B
e$B;H$($^$;$s!#$H$$$&$N$O!"F10l%9%l%C%I$@$+$i$G$9!#e(B

e$B$=$l$H$b!"C1$Ke(Bfreee$B=hM}$N7k2L$H$7$Fe(BEVENTSINK_Invoke()e$B$,%3!<%ke(B
e$B%P%C%/$5$l$k$@$1$J$s$G$7$g$&$+e(B?

e$B$3$C$A$N2DG=@-$ODc$$5$$,$7$^$9!#e(B
e$B>e$+$i!"$3$l$,860x$G$7$g$&!#e(B
Win32OLEe$B$,!“e(Bfreee$B$N7k2L!“e(Bserver->Release()e$B$r8F$S=P$7$^$9!#e(B
e$B$3$l$,%”%&%H%W%m%;%9%5!<%P$G$”$l$P!"e(BLRPCe$B$H$J$j!"1~Ez$rBT$D$?$a$K%a%C%;!<e(B
e$B%8%]%s%W$N5b$_$@$7$,3+;O$5$l$^$9!#e(B
Releasee$B$N7k2L!"B>$K%F%s%]%i%j$K:n@.$7$?%%V%8%’%/%H$Ne(BReleasee$B$,%3!<%k%P%Ce(B
e$B%/$5$l$^$9!J$?$H$($P!“e(BEventSinke$B$G$9$,!”$=$l0J30$K$b$"$jF@$k$O$:$G$9!#FCe(B
e$B$Ke(BIEe$B$G$"$l$Pe(BDOMe$B4X78$N:Y$+$J%
%V%8%’%/%H$,@8@.$5$l$F$$$k$H;W$$$^$9!K!#e(B

e$B$Q$C$H;W$$$D$/2r7h0F$O!"e(BWin32OLEe$B$NCf$KGQ4~%$%s%?%U%’%$%9$N%-%e!<$r;}$A!"e(B
ole_freee$B$N8F$S=P$7$G$O$=$N%-%e!<$Ke(BReleasee$BBT$A$N%$%s%?%U%’%$%9$rIU$1$k$@e(B
e$B$1$K$7$F$*$-!"B>$N%?%$%_%s%0!J$3$l$,$H$l$k$+$I$&$+$ONI$/$o$+$i$J$$$G$9$,!"e(B
e$B<!$Ne(BWin32OLEe$B$KBP$9$k8F$S=P$7$H$+!)!K$Ge(BReleasee$B$r$+$1$k$H$+$G$O$J$$$G$7$ge(B
e$B$&$+!#e(B

e$B=uED$G$9!#e(B

arton wrote:

e$B$h$/$o$+$C$F$J$$$s$G$9$,!"e(BEVENTSINK_Invoke()e$B$J$I$OHsF14|$Ke(BWindows
e$B$+$i8F$S=P$5$l$F$$$k$s$G$7$g$&$+e(B?
e$B%a%C%;!<%8%]%s%W!Je(BPeekMessagee$B$H$+e(BGetMessagee$B$He(BDispatchMessagee$B$NAH$_9g$o$;!Ke(B
e$B$r8F$P$J$$8B$j$O$J$$$O$:$G$9!#>/$J$/$H$b!“e(BWin32OLEe$B$G$O$=$l0J30$G%3!<%k%P%Ce(B
e$B%/$r<u$1$^$;$s!Je(BOLEe$B%5!<%P$N<BAu$K%P%0$,$”$C$F$b!"0[$J$k%9%l%C%I$G8F$P$le(B
e$B$k$O$:!K!#e(B

EVENTSINK_Invokee$B$O!“e(BOLEe$B%5!<%P$+$i$N%$%Y%s%H$NDLCN$r<u$1$H$ke(B
e$B4X?t$G$9!#e(B
e$B$G!”>l9g$K$h$C$F$O!"%a%C%;!<%8%]%s%W$r8F$s$G!"e(BOLEe$B%5!<%P$+$i$Ne(B
e$B%$%Y%s%HDLCN$rBT$A<u$1$k$h$&$J;H$$J}$bA[Dj$7$F$^$7$?!#e(B

e$B$@$H$9$k$H!"$3$l$i$N%3!<%k%P%C%/4X?tFb$G$Ne(Brubye$B%*%V%8%’%/%HA`e(B
e$B:n$O$A$g$C$H9M$($J$$$H$$$1$J$$$s$8$c$J$$$+$H$$$&5$$,$7$^$9!#e(B
e$B$=$l$H$b!“C1$Ke(Bfreee$B=hM}$N7k2L$H$7$Fe(BEVENTSINK_Invoke()e$B$,%3!<%ke(B
e$B%P%C%/$5$l$k$@$1$J$s$G$7$g$&$+e(B?
e$B$3$l$O$”$jF@$^$9$M!#e(B

e$B$3$N2DG=@-$O>/$$$H;W$C$?$s$G$9$1$Ie(B…e$B!#e(B

e$B%9%?%C%/%H%l!<%9$N>e$N$[$&$O$I$&$J$C$F$$$^$9$+!)e(B

e$B<!$N$h$&$J46$8$G$9!#e(B

*1 msvcr80-ruby190.dll!rb_newobj()
2 msvcr80-ruby190.dll!str_alloc(unsigned long klass=12338520)
3 msvcr80-ruby190.dll!str_new(unsigned long klass=12338520,
const char * ptr=0x00000000, long len=0)
4 msvcr80-ruby190.dll!rb_enc_str_new(const char * ptr=0x012fc7d0,
long len=16, OnigEncodingTypeST * enc=0x00c330f0)
5 win32ole.so!ole_wc2vstr(unsigned short * pw=0x00000000, int
isfree=1)
6 win32ole.so!EVENTSINK_Invoke(IEventSink *
pEventSink=0x013bb4d0, long dispid=104, const _GUID * const
riid=0x002677a4, unsigned long lcid=0, unsigned short wFlags=1,
tagDISPPARAMS * pdispparams=0x00269d68,
tagVARIANT * pvarResult=Empty,
tagEXCEPINFO * pexcepinfo=0x00000000, unsigned int *
puArgErr=0x00000000)
7 oleaut32.dll!7714c351()
8 [e$B2<$N%U%l!<%`$O4V0c$C$F$$$k$+!"$^$?$O8+$D$+$j$^$;$s!#e(B
oleaut32.dll e$B$KBP$7$FFI$_9~$^$l$?%7%s%%k$O$"$j$^$;$s!#e(B]
9 oleaut32.dll!770ddb25()
10 rpcrt4.dll!77eb658c()
11 msvcr80-ruby190.dll!rb_gc_mark(unsigned long ptr=269465784)
12 msvcr80-ruby190.dll!gc_mark_children(rb_objspace *
objspace=0x00000000, unsigned long ptr=0, int lev=2287464)

Cygwin e$B$Ke(B gdbe$B$r%$%s%9%H!<%k$7$F$J$+$C$?e(B…e$B!#e(B
e$B=uEDe(B e$B2m5*e(B

artone$B$G$9e(B

e$B$3$A$i$N%a!<%k$K$O5$IU$-$^$;$s$G$7$?!#e(B

6 win32ole.so!EVENTSINK_Invoke(IEventSink *
pEventSink=0x013bb4d0, long dispid=104, const _GUID * const

_DWebBrowserEventse$B$Ne(BDownloadCompletee$B%$%Y%s%H$G$9$M!#$J$s$G:#:"!D!De(B

     riid=0x002677a4, unsigned long lcid=0, unsigned short wFlags=1,
     tagDISPPARAMS * pdispparams=0x00269d68,
     tagVARIANT * pvarResult=Empty,
     tagEXCEPINFO * pexcepinfo=0x00000000, unsigned int *
     puArgErr=0x00000000)

7 oleaut32.dll!7714c351()
8 [e$B2<$N%U%l!<%`$O4V0c$C$F$$$k$+!"$^$?$O8+$D$+$j$^$;$s!#e(B
oleaut32.dll e$B$KBP$7$FFI$_9~$^$l$?%7%s%%k$O$"$j$^$;$s!#e(B]
9 oleaut32.dll!770ddb25()
10 rpcrt4.dll!77eb658c()

marke$B$J$N$,IT;W5D!#e(B
finalizee$B$r8F$V$N$C$F!“e(Bgc_sweepe$B$8$c$J$$$N!)e(B
e$B$?$@!“e(Boleaut32e$B$H$+e(Brpcrt4e$B$”$?$j$,%9%?%C%/%U%l!<%`$r$$$8$k$J$I$NM}M3$+$i!“e(B
e$B$3$3$+$i!J$^$?$Oe(B8e$B$”$?$j$+$i!K2<$,%4%_$r=&$C$F$$$k2DG=@-$O$”$k$H;W$$$^$9!#e(B

11 msvcr80-ruby190.dll!rb_gc_mark(unsigned long ptr=269465784)
12 msvcr80-ruby190.dll!gc_mark_children(rb_objspace *
objspace=0x00000000, unsigned long ptr=0, int lev=2287464)

e$B%3%s%;%W%H%3!<%I$G$9$,!"$3$s$J46$8$G$7$g$&$+!)e(B
fole_free(VALUE self)
{
struct oledata *pole;
rb_secure(4);
OLEData_Get_Struct(self, pole);
pole->freeing = TRUE; // e$B?7@_e(B
OLE_FREE(pole->pDispatch);
pole->pDispatch = NULL;
return Qnil;
}

STDMETHODIMP EVENTSINK_Invoke(
PEVENTSINK pEventSink,
– snip —
UINT *puArgErr
) {
– snip —
PIEVENTSINKOBJ pEV = (PIEVENTSINKOBJ)pEventSink;
pTypeInfo = pEV->pTypeInfo;
obj = evs_entry(pEV->m_event_id);
if (obj->freeing) { — e$B2rJ|Cf$J$iL5;ke(B
return NOERROR;
}
if (!rb_obj_is_kind_of(obj, cWIN32OLE_EVENT)) {
return NOERROR;
}

artone$B$G$9!#e(B

e$B$3$N<!$K%]%9%H$7$?!"e(BMessageFiltere$B$r;H$C$F%$%s%P%&%s%I%a%C%;!<%8$KBP$7$Fe(BGC
e$BCf$+$I$&$+H=CG$9$kJ}K!!Je(BGET_VM()->during_gce$B!K$N$[$&$,!"O3$l$,$J$/$FNI$$e(B
e$B$N$G$O$J$$$+$H;W$$$^$9!#e(B

EVENTSINK_Invokee$B$O<+J,$,%$%Y%s%H$rBT$C$F$$$kAj<j$Ne(B
WIN32OLEe$B%%V%8%’%/%He(B(OLEe$B%5!<%Pe(B)e$B$,2rJ|e(B(OLE_FREE)e$BCf$J$iL5;k$9$k!#e(B
e$B$3$l$O!"CfESH>C<$G$7$?!#LdBj$Oe(BStringe$B$N3NJ]$J$N$G!"e(BGCe$BCf$N%
%V%8%’%/%H$+$Ie(B
e$B$&$+$OL54X78$G$9!#$9$_$^$;$s!#e(B

e$B$"$H!"e(Bpolee$B<+BN$O!"e(Bfreee$B$7$J$$$Ge(Bfreee$BBP>]%-%e!<$Ke(B
e$BJL$N%?%$%_%s%0$Ge(Bfreee$B$7$F%a%b%j!<%j!<%/$7$J$$$h$&$K$9$k!#e(B

e$B$3$NJ}K!$O!"e(BGCe$BCf$Ke(BLRPCe$B$OH/@8$7$J$$$N$Ge(BOKe$B$@$H$O;W$$$^$9$,!"e(BMesageFiltere$B$Ke(B
e$BHf$Y$k$H<BAu$,LLE]$J5$$,$7$^$9!#e(B

e$B=uED$G$9!#e(B

e$B$$$m$$$m$"$j$,$H$&$4$6$$$^$9!#e(B

OLEe$B%5!<%P!<$re(BReleasee$B$7$?%?%$%_%s%0$Ge(BEVENTSINK_Invokee$B$KDLCN$,Mh$k$H$$$&e(B
e$B2DG=@-$r$9$C$+$j8+Mn$7$F$$$^$7$?!#e(B

e$B$^$@!"$h$/M}2r$7$F$$$J$$$N$G$9$,e(B…

arton wrote:

}
WIN32OLEe$B%*%V%8%’%/%H$,2rJ|e(B(OLE_FREE)e$BCf$+$I$&$+$Ne(Bflage$B$r?7@_$9$k!#e(B

    return NOERROR;
}
if (!rb_obj_is_kind_of(obj, cWIN32OLE_EVENT)) {
    return NOERROR;
}

EVENTSINK_Invokee$B$O<+J,$,%$%Y%s%H$rBT$C$F$$$kAj<j$Ne(B
WIN32OLEe$B%*%V%8%’%/%He(B(OLEe$B%5!<%Pe(B)e$B$,2rJ|e(B(OLE_FREE)e$BCf$J$iL5;k$9$k!#e(B

e$B$"$H!"e(Bpolee$B<+BN$O!"e(Bfreee$B$7$J$$$Ge(Bfreee$BBP>]%-%e!<$Ke(B
e$BJL$N%?%$%_%s%0$Ge(Bfreee$B$7$F%a%b%j!<%j!<%/$7$J$$$h$&$K$9$k!#e(B

e$B$H$$$&2r<a$G9g$C$F$^$9$+!)e(B

e$B=uEDe(B e$B2m5*e(B

e$B$9$_$^$;$s!"<+J,$NEj9F$K%j%W%i%$$7$h$&$H$7$?$?$a!"Aw$l$F$$$^$;$s$G$7$?!#e(B
e$B0J2<$N%a!<%k$rAw$C$?$D$b$j$K$J$C$F$$$^$7$?!#e(B

artone$B$G$9!#e(B

e$B$9$_$^$;$s!"$A$g$C$H4*0c$$$7$F$^$7$?!#e(B

6 win32ole.so!EVENTSINK_Invoke(IEventSink *
pEventSink=0x013bb4d0, long dispid=104, const _GUID * const

_DWebBrowserEventse$B$Ne(BDownloadCompletee$B%$%Y%s%H$G$9$M!#$J$s$G:#:"!D!De(B

e$B$3$l$O!":#2rJ|$7$D$D$"$k%%V%8%’%/%H$H4X78$"$k$+$I$&$+$OJLLdBj$G$7$?$M!#e(B
e$B$^$H$a$k$H!“e(B
1.
GCe$B$Ne(Bsweepe$BCf$Ke(BReleasee$B$r8F$V$?$a$Ke(BLRPCe$B$N1~EzBT$A$K$J$ke(B
2.
e$B$7$?$,$C$F!”$3$N$H$-$K%a%C%;!<%8%]%s%W$,5b$^$l$k$N$G!"e(B1e$B$N%
%V%8%’%/%He(B
e$B$H$OL54X78$K!J4X78$"$k$+$bCN$l$J$$!"$J$$$+$bCN$l$J$$!K!"%$%Y%s%H$r<u?.$9e(B
e$B$k2DG=@-$,$"$ke(B
3. e$B%$%Y%s%H$r<u?.$9$k$He(BStringe$B$r:n$m$&$H$9$ke(B
4. e$B$7$+$7!"e(B1e$B$+$ie(BGCe$BCf$J$N$G%(%i!<$H$J$k!#e(B

e$B%$%Y%s%H$N$h$&$K!"%$%s%P%&%s%I$N=hM}$O!“e(BGCe$BCf$G$”$l$P!"e(BMessageFiltere$B$Ne(B
MessagePendinge$B$KBP$7$F!"e(BPENDINGMSG_WAITNOPROCESS
e$B$rJV$7$F!"e(BGCe$B$,40N;$9$ke(B
e$B$^$G=hM}BT$A$K$5$;$F$*$/$N$,NI$$$N$G$O$J$$$G$7$g$&$+!#e(B

artone$B$G$9!#e(B

e$B%Q%C%A$r:n$C$F$$^$7$?!#<j85$Ne(BVC6e$B!\e(BWindows Vista
64e$B!J$?$@$7e(BRubye$B$Oe(Bx86e$B!K$Ge(B
e$B:F8=!]2r>C$r3NG’$7$F$"$j$^$9!#e(B
e$B$?$@!“e(Bgce$BCf$+$I$&$+H=CG$9$kI,MW$,$”$k$?$a!“e(Bgc.ce$B$K$b%Q%C%A$,I,MW$G$7$?!#e(B
e$B$^$?!”%A%’%C%/BP>]$Ke(BCALLTYPE_ASYNCe$B$OITMW$J$O$:$G$9$,!JBT$A>uBV$J$N$G!"e(B
Releasee$B$N1~Ez$KAjEv$9$ke(BCALLTYPE_NESTEDe$B$H!"e(BCALLTYPE
*CALLPENDINGe$B$N$$,Mhe(B
e$B$k$O$:!K!“0l1~!”%"%s%I%-%e%a%s%F%C%I$J?6$kIq$$$r5$$K$7$FF~$l$F$"$j$^$9!#e(B
e$B%Q%C%A$NBP>]$O!"e(BRuby-1.9.0-2e$B$N%=!<%9$G$9!#e(B

diff -p gc.c.old gc.c
*** gc.c.old Wed Jun 18 23:09:33 2008
— gc.c Wed Jul 02 18:19:35 2008
*************** rb_fill_value_cache(rb_thread_t *th)
*** 703,708 ****
— 703,725 ----
#endif

VALUE

  • rb_during_gc(void)
  • {
  • #if USE_VALUE_CACHE
  • rb_thread_t *th = GET_THREAD();
    
  • VALUE v = *th->value_cache_ptr;
    
  • #if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE
  • rb_objspace_t *objspace = th->vm->objspace;
    
  • #else
  • rb_objspace_t *objspace = &rb_objspace;
    
  • #endif
  • #else
  • rb_objspace_t *objspace = &rb_objspace;
    
  • #endif
  • return (during_gc) ? Qtrue: Qfalse;
    
  • }
  • VALUE
    rb_newobj(void)
    {
    #if USE_VALUE_CACHE

diff -up win32ole.c.old win32ole.c
*** win32ole.c.old Tue Apr 22 09:58:51 2008
— win32ole.c Wed Jul 02 16:49:04 2008


*** 31,37 ****
— 31,40 ----
#include <varargs.h>
#define va_init_list(a,b) va_start(a)
#endif

  • #include <objidl.h>

  • extern VALUE rb_during_gc();

  • #define DOUT fprintf(stderr,"[%d]\n",LINE)
    #define DOUTS(x) fprintf(stderr,"[%d]:" #x “=%s\n”,LINE,x)
    #define DOUTMSG(x) fprintf(stderr, “[%d]:” #x “\n”,LINE)
    *************** static rb_encoding *cWIN32OLE_enc;
    *** 201,206 ****
    — 204,212 ----
    static UINT g_cp_to_check = CP_ACP;
    static char g_lcid_to_check[8 + 1];
    static VARTYPE g_nil_to = VT_ERROR;

  • static IMessageFilterVtbl message_filter;

  • static IMessageFilter imessage_filter = { &message_filter };

  • static IMessageFilter* previous_filter;

    struct oledata {
    IDispatch *pDispatch;
    *************** static VALUE folevariant_ary_aset(int ar
    *** 517,522 ****
    — 523,623 ----
    static VALUE folevariant_value(VALUE self);
    static VALUE folevariant_vartype(VALUE self);
    static VALUE folevariant_set_value(VALUE self, VALUE val);

  • static HRESULT (STDMETHODCALLTYPE mf_QueryInterface)(

  • IMessageFilter __RPC_FAR * This,
    
  • /* [in] */ REFIID riid,
    
  • /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
    
  • {

  • if (MEMCMP(riid, &IID_IUnknown, GUID, 1) == 0
    
  •     || MEMCMP(riid, &IID_IMessageFilter, GUID, 1) == 0)
    
  • {
    
  •     *ppvObject = &message_filter;
    
  •     return S_OK;
    
  • }
    
  • return E_NOINTERFACE;
    
  • }

  • static ULONG (STDMETHODCALLTYPE mf_AddRef)(

  • IMessageFilter __RPC_FAR * This)
    
  • {

  • return 1;
    
  • }

  • static ULONG (STDMETHODCALLTYPE mf_Release)(

  • IMessageFilter __RPC_FAR * This)
    
  • {

  • return 1;
    
  • }

  • static DWORD (STDMETHODCALLTYPE mf_HandleInComingCall)(

  • IMessageFilter __RPC_FAR * pThis,
    
  • DWORD dwCallType,      //Type of incoming call
    
  • HTASK threadIDCaller,  //Task handle calling this task
    
  • DWORD dwTickCount,     //Elapsed tick count
    
  • LPINTERFACEINFO lpInterfaceInfo //Pointer to INTERFACEINFO 
    

structure

  • )
    
  • {
  • #ifdef DEBUG_MESSAGEFILTER
  • printf("incoming %08X, %08X, %d\n", dwCallType, threadIDCaller, 
    

dwTickCount);

  • fflush(stdout);
    
  • #endif
  • switch (dwCallType)
    
  • {
    
  • case CALLTYPE_ASYNC:
    
  • case CALLTYPE_TOPLEVEL_CALLPENDING:
    
  • case CALLTYPE_ASYNC_CALLPENDING:
    
  •     if (rb_during_gc() == Qtrue) {
    
  •         return SERVERCALL_RETRYLATER;
    
  •     }
    
  •     break;
    
  • default:
    
  •     break;
    
  • }
    
  • if (previous_filter) {
    
  •     return 
    

previous_filter->lpVtbl->HandleInComingCall(previous_filter,

  •                                                dwCallType,
    
  •                                                threadIDCaller,
    
  •                                                dwTickCount,
    
  •                                                lpInterfaceInfo);
    
  • }
    
  • return SERVERCALL_ISHANDLED;
    
  • }
  • static DWORD (STDMETHODCALLTYPE mf_RetryRejectedCall)(
  • IMessageFilter* pThis,
    
  • HTASK threadIDCallee,  //Server task handle
    
  • DWORD dwTickCount,     //Elapsed tick count
    
  • DWORD dwRejectType     //Returned rejection message
    
  • )
    
  • {
  • if (previous_filter) {
    
  •     return 
    

previous_filter->lpVtbl->RetryRejectedCall(previous_filter,

  •                                               threadIDCallee,
    
  •                                               dwTickCount,
    
  •                                               dwRejectType);
    
  • }
    
  • return 1000;
    
  • }
  • static DWORD (STDMETHODCALLTYPE mf_MessagePending)(
  • IMessageFilter* pThis,
    
  • HTASK threadIDCallee,  //Called applications task handle
    
  • DWORD dwTickCount,     //Elapsed tick count
    
  • DWORD dwPendingType    //Call type
    
  • )
    
  • {
  • if (rb_during_gc()) {
    
  •     return PENDINGMSG_WAITNOPROCESS;
    
  • }
    
  • if (previous_filter) {
    
  •     return 
    

previous_filter->lpVtbl->MessagePending(previous_filter,

  •                                            threadIDCallee,
    
  •                                            dwTickCount,
    
  •                                            dwPendingType);
    
  • }
    
  • return PENDINGMSG_WAITNOPROCESS;
    
  • }

    typedef struct _Win32OLEIDispatch
    {
    *************** ole_initialize()
    *** 1050,1055 ****
    — 1151,1161 ----
    /*
    atexit((void (*)(void))ole_uninitialize);
    */

  •     hr = CoRegisterMessageFilter(&imessage_filter, 
    

&previous_filter);

  •     if(FAILED(hr)) {
    
  •         previous_filter = NULL;
    
  •         ole_raise(hr, rb_eRuntimeError, "fail: install OLE 
    

MessageFilter");

  •     }
    }
    
    }

*************** Init_win32ole()
*** 8106,8111 ****
— 8212,8225 ----
com_vtbl.GetTypeInfo = GetTypeInfo;
com_vtbl.GetIDsOfNames = GetIDsOfNames;
com_vtbl.Invoke = Invoke;
+

  • message_filter.QueryInterface = mf_QueryInterface;
    
  • message_filter.AddRef = mf_AddRef;
    
  • message_filter.Release = mf_Release;
    
  • message_filter.HandleInComingCall = mf_HandleInComingCall;
    
  • message_filter.RetryRejectedCall = mf_RetryRejectedCall;
    
  • message_filter.MessagePending = mf_MessagePending;
    
  • com_hash = Data_Wrap_Struct(rb_cData, rb_mark_hash, st_free_table, 
    

st_init_numtable());
rb_register_mark_object(com_hash);

e$B=uED$G$9!#e(B

arton wrote:

e$B$^$H$a$k$H!"e(B

  1. GCe$B$Ne(Bsweepe$BCf$Ke(BReleasee$B$r8F$V$?$a$Ke(BLRPCe$B$N1~EzBT$A$K$J$ke(B
  2. e$B$7$?$,$C$F!"$3$N$H$-$K%a%C%;!<%8%]%s%W$,5b$^$l$k$N$G!“e(B1e$B$N%*%V%8%’%/%He(B
    e$B$H$OL54X78$K!J4X78$”$k$+$bCN$l$J$$!"$J$$$+$bCN$l$J$$!K!"%$%Y%s%H$r<u?.$9e(B
    e$B$k2DG=@-$,$"$ke(B
  3. e$B%$%Y%s%H$r<u?.$9$k$He(BStringe$B$r:n$m$&$H$9$ke(B
  4. e$B$7$+$7!"e(B1e$B$+$ie(BGCe$BCf$J$N$G%(%i!<$H$J$k!#e(B

e$B$J$k$[$I!#;d$O!"A4$/e(B1.e$B$He(B2.e$B$N$H$3$m$,F,$NCf$G$D$J$,$C$F$$$^$;$s$G$7$?!#e(B

e$B%$%Y%s%H$N$h$&$K!"%$%s%P%&%s%I$N=hM}$O!“e(BGCe$BCf$G$”$l$P!"e(BMessageFiltere$B$Ne(B
MessagePendinge$B$KBP$7$F!"e(BPENDINGMSG_WAITNOPROCESS e$B$rJV$7$F!"e(BGCe$B$,40N;$9$ke(B
e$B$^$G=hM}BT$A$K$5$;$F$*$/$N$,NI$$$N$G$O$J$$$G$7$g$&$+!#e(B

IMessageFiltere$B%$%s%?!<%U%’!<%9$r%$%s%W%j%a%s%H$7$Fe(BMessagePendinge$B$NCf$G!"e(B
GCe$BCf$@$C$?$i!"e(BPENDINGMSG_WAITNOPROCESSe$B$rJV$9!#e(B
e$B$H$$$&46$8$G$7$g$&$+!#e(B

GCe$BCf$+$I$&$+H=CG$9$ke(BRuby
e$B$Ne(BAPIe$B$ODs6!$5$l$F$k$s$G$7$g$&$+!)e(B

e$B=uEDe(B e$B2m5*e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:35313] Re: [BUG] test_win32ole_event.rb in trunk”
on Jul.02,2008 18:23:50, [email protected] wrote:

e$B$?$@!“e(Bgce$BCf$+$I$&$+H=CG$9$kI,MW$,$”$k$?$a!"e(Bgc.ce$B$K$b%Q%C%A$,I,MW$G$7$?!#e(B

e$B%Q%?!<%s$+$i$9$k$H!"4X?tL>$Oe(B …_p
e$B$K$J$k$s$8$c$J$$$+$H;W$$$^e(B
e$B$9$,!"L>A0$O0N$$?M$KH=CG$7$F$b$i$&$H$7$Fe(B…

e$BK\7o$O$?$^$?$^e(BWin32OLEe$B$,e(B1.8e$B$He(B1.9e$B$G0[$J$kFbMF$J$N$Ge(B1.9e$B$G$7$+Lde(B
e$BBj$,H/@8$7$F$$$^$;$s$,!"e(B1.8e$B$G$bF1MM$Ke(BGCe$BCf$Ne(Brubye$B%*%V%8%'%/%H3Ne(B
e$BJ]$,6X;_$5$l$F$$$k$3$H$+$i!"JL$N3HD%%i%$%V%i%j$GN`;w$NLdBj$,e(B
e$BH/@8$7$&$k$H;W$$$^$9!#e(B
e$B$H$$$&$o$1$G!"L>A0$,7h$^$C$?$i!"F1$8$h$&$J<q;]$N4X?t$re(Bruby_1_8
e$B$K$b%P%C%/%]!<%H$7$?J}$,$$$$$s$8$c$J$$$+$H6r9M$7$^$9!#e(B

e$B$=$l$G$O!#e(B

e$B=uED$G$9!#e(B

e$B$9$$$^$;$s!#e(B
e$B@hDx!"e(Bartone$B$5$s$Ne(B[ruby-dev:35313]e$B$N%a!<%k$rFI$^$:$KEj9F$7$F$7$^$$$^$7$?!#e(B

arton wrote:

e$B%Q%C%A$r:n$C$F$_$^$7$?!#<j85$Ne(BVC6e$B!\e(BWindows Vista 64e$B!J$?$@$7e(BRubye$B$Oe(Bx86e$B!K$Ge(B
e$B:F8=!]2r>C$r3NG’$7$F$"$j$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B
Mingw32e$B$G$b!":F8=e(B - e$B2r>C$r3NG’$7$^$7$?!#e(B

Cygwine$B$He(BVC2005EE
e$B$O!“e(Btrunke$B$Ne(B17818e$B$K$7$?>uBV$@$He(BBUGe$B$,:F8=$G$-$J$/$Fe(B
e$B%Q%C%A$J$7$G$b1?0-$/F0$$$F$7$^$$$^$7$?!#e(B
e$B$G$9$,!”%Q%C%A$"$j$G$bF0:n$9$k$3$H$O3NG’$G$-$^$7$?!#e(B
(OSe$B$O!"e(BWindows XPe$B$G$9!#e(B)

e$B$?$@!“e(Bgce$BCf$+$I$&$+H=CG$9$kI,MW$,$”$k$?$a!"e(Bgc.ce$B$K$b%Q%C%A$,I,MW$G$7$?!#e(B

e$B$"$"!"$d$C$Q$je(BAPIe$B$J$+$C$?$s$G$9$M!#e(B

  •     hr = CoRegisterMessageFilter(&imessage_filter, &previous_filter);
    

e$B$3$l$C$F!"8e;OKv$G!“e(BCoRegisterMessageFilter(NULL,
&previous_filter);
e$B$r8F$P$J$/$F$bBg>fIW$J$s$G$7$g$&$+!)e(B
(e$B8F$V%?%$%_%s%0$,$”$k$N$+$I$&$+2x$7$$$G$9$,e(B…e$B!#e(B)

win32ole.ce$B$N%Q%C%A$O$"$j$,$?$/<h$j9~$^$;$F$$$?$@$/$D$b$j$G$9$,!“e(B
e$B$^$:$O!”$=$NA0$Ke(B
gc.ce$B$N%Q%C%A$r<h$j9~$s$G$b$i$&$h$&$K$7$^$9!#e(B

e$B=uEDe(B e$B2m5*e(B

e$B=uED$G$9!#e(B

arton wrote:

Cygwine$B$He(BVC2005EE e$B$O!"e(Btrunke$B$Ne(B17818e$B$K$7$?>uBV$@$He(BBUGe$B$,:F8=$G$-$J$/$Fe(B
e$B%Q%C%A$J$7$G$b1?0-$/F0$$$F$7$^$$$^$7$?!#e(B
e$B:F8=$5$;$k$K$O!"0J2<$N$h$&$K$9$k$@$1$G==J,$G$9!Je(BCygwine$B$@$H0c$&$N$+$J!K!#e(B

e$B$4$a$s$J$5$$!#:F8=$7$^$7$?!#$G!"%Q%C%A$G$A$c$s$HF0:n$7$^$7$?!#e(B

e$B$?$@!“3N$+0JA0!“30It%W%m%;%9%5!<%P!<$NBT$A>uBV$N$H$-$Ke(BMessageFiltere$B$r;He(B
e$B$&OCBj$,$”$C$?$H;W$$$^$9$,!”$3$N4X?t$O$=$l!J$C$F$I$&$7$m$C$F$$$&OC$G$7$?$Ce(B
e$B$1!)!K$r<BAu$9$k$?$a$N%F%s%W%l!<%H$@$H;W$C$F$/$@$5$$!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B
[ruby-talk:298615]e$B$,H/C<$NOC$G$9!#$F$$$&$+!";d$b$[$H$s$IK:$l$F$^$9!#e(B

e$B8F$V$H$9$l$P!"e(BOleUninitializee$B$ND>A0!Je(Bole_uninitializee$B4X?t$NCf!K$G$9$,!“e(B
e$B!&e(Bole_uninitializee$B$,8F$P$l$J$$%G%C%I%3!<%I$K$J$C$F$$$k!J$H;W$&!Ke(B
e$B!&D>8e$Ke(BOLEe$B%a%C%;!<%8$N<u?.$r$G$-$J$/$9$k$N$@$+$i!“8F$V0UL#$,$J$$e(B
e$B$H$$$&$o$1$G!“8F$S$^$;$s!#$,!”%3!<%I$NBP>N@-$+$i$Oe(Bole_uninitizliee$B$NCf$Ge(B
e$B8F$V$N$O$”$j$J$N$G!”=uED$5$s$N9%$_$GJQ$($F$/$@$5$$!#e(B

e$BN;2r$G$9!#e(B

e$B=uED$G$9!#e(B

U.Nakamura wrote:

e$BK\7o$O$?$^$?$^e(BWin32OLEe$B$,e(B1.8e$B$He(B1.9e$B$G0[$J$kFbMF$J$N$Ge(B1.9e$B$G$7$+Lde(B
e$BBj$,H/@8$7$F$$$^$;$s$,!"e(B1.8e$B$G$bF1MM$Ke(BGCe$BCf$Ne(Brubye$B%*%V%8%’%/%H3Ne(B
e$BJ]$,6X;_$5$l$F$$$k$3$H$+$i!"JL$N3HD%%i%$%V%i%j$GN`;w$NLdBj$,e(B
e$BH/@8$7$&$k$H;W$$$^$9!#e(B

e$BB?J,!"1?$,NI$/$FH/@8$7$F$$$J$$!JJs9p$,$J$$!K$@$1$G!“e(B1.8e$B$Ne(BWin32OLE
e$B$G$bF1$8$3$H$,5/$3$jF@$k$H;W$C$F$^$9!#e(B
e$B<+J,$O%F%9%H$Ge(BWIN32OLE_EVENTe$B$r;H$&$@$1$N%i%$%H%f!<%6!<$J$N$Ge(B
e$BAx6x$7$F$^$;$s$,!”$b$7$+$7$?$ie(BWIN32OLE_EVENTe$B%X%S!<%f!<%6!<$N?Me(B
e$B$OAx6x$7$F$$$k$+$b$G$9!#e(B

e$B=uEDe(B e$B2m5*e(B