From: arton Date: 2002-12-05T22:29:40+09:00 Subject: [ruby-list:36678] Re: WIN32OLE と IAgentCtlRequest artonです。 On Thu, 5 Dec 2002 18:47:48 +0900 Shusaku さん wrote: --snip-- > どうしてVBではIDプロパティを使わずに比較ができるのでしょうか? > 暗黙的に呼び出すような仕組みになってるなのかなぁ… > > RubyでもIDプロパティを読み出さずに比較する(ように見せる?)方法は > あるのでしょうか? > dispinterface IAgentCtlRequest { > properties: > methods: > [id(00000000), propget, hidden] > long ID(); > [id(0x00000001), propget] > long Status(); oaidl.hから #define DISPID_VALUE ( 0 ) この、DISPID(Invokeメソッドで使用するメソッドID)の値0は、OLEオートメー ションで特別な意味を持っています。具体的にはデフォルトプロパティで、明示 的なメソッド名の省略時の呼び出しに使用されます(無理矢理こじつけると、 method_missingというところかな)。 Rubyでこれを表現するのは、以下の理由から無理ではないかと思います。 x = WIN32OLE.new("..") a = x # aには型がないため、xそのものが代入できる x = b # xに、bが代入できる。 一方の、VB(VBA、VBScript)は、オブジェクトの代入に限り set x = object という構文で、それ以外は [let] x = something のため、オブジェクトそのものの代入とデフォルトプロパティの呼び出しの区別 が可能です。 #したがって、C++でも、デフォルトプロパティは使用できませんし、VB.NETでは、 #letとsetを文法から落としたので、デフォルトプロパティは存在しません。 -- arton __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/