[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>

原です。

19 messages 2002/12/06

[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>

ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい

11 messages 2002/12/16

[ruby-list:36678] Re: WIN32OLE と IAgentCtlRequest

From: arton <artonx@...>
Date: 2002-12-05 13:29:40 UTC
List: ruby-list #36678
artonです。

On Thu, 5 Dec 2002 18:47:48 +0900
Shusaku <tsyk@yk.rim.or.jp>さん 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 <artonx@yahoo.co.jp>

__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/


In This Thread