[#36644] Gtk.main — TOYOFUKU Chikanobu <toyofuku@...>
豊福です。
18 messages
2002/12/03
[#36645] Re: Gtk.main
— nobu.nakada@...
2002/12/03
なかだです。
[#36646] Re: Gtk.main
— TOYOFUKU Chikanobu <toyofuku@...>
2002/12/03
豊福です。
[#36649] Re: Gtk.main
— nobu.nakada@...
2002/12/03
なかだです。
[#36676] WIN32OLE と IAgentCtlRequest — Shusaku <tsyk@...>
Shusakuです。
7 messages
2002/12/05
[#36683] SyntaxError caused by redefinition of Class#== within irb. — Shusaku <tsyk@...>
Shusakuです。
5 messages
2002/12/05
[#36686] 1.1 < 61.1 - 60.0 — Shin-ichiro HARA <sinara@...>
原です。
19 messages
2002/12/06
[#36693] Re: 1.1 < 61.1 - 60.0
— "Shigeo Kobayashi" <shigeo@...>
2002/12/06
小林です。
[#36717] ruby 1.6.8 preview3 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
12 messages
2002/12/09
[#36718] Re: ruby 1.6.8 preview3
— m_seki@...
2002/12/09
[#36728] blade.stop — Shin-ichiro HARA <sinara@...>
原です。
9 messages
2002/12/10
[#36756] Re: blade.stop
— Shin-ichiro HARA <sinara@...>
2002/12/13
原です。
[#36734] Rubyソースコード完全解説 — Minero Aoki <aamine@...>
あおきです。ちょっと宣伝です。
10 messages
2002/12/11
[#36740] WIN32OLEでの定数読み込み — Takashi & Kayoko Sano <tksano@...3.kcn.ne.jp>
こんにちは。佐野と申します。
9 messages
2002/12/12
[#36742] DBM — OHARA Shigeki <os@...>
大原です。
6 messages
2002/12/12
[#36757] ruby 1.6.7+ruby-postgres-0.7.0でSegmentation fault — iga50@...
五十嵐と申します。
5 messages
2002/12/13
[#36768] Ruby/FreeType メンテナ募集 — Kazuhiro Yoshida <moriq.kazuhiro@...>
もりきゅうです。
4 messages
2002/12/15
[#36770] www.ruby-lang.orgリニューアル準備のお知らせ — TADA Tadashi <sho@...>
ruby-lang.orgのwebmasterチームでは、タイムリーな情報提供と使いやすい
11 messages
2002/12/16
[#36780] 2GB超のファイルにアクセスするとErrno::EOVERFLOWが発生してしまう — oka@...
4 messages
2002/12/16
[#36793] Thread と Net::HTTP — Makoto Satoh <makotosato2@...>
佐藤と申します。
9 messages
2002/12/17
[#36796] Ruby SNMPについて
— Tadashi Oh-Ya <toy@...>
2002/12/17
おおやと申します。
[#36797] Re: Ruby SNMPについて
— "Akinori MUSHA" <knu@...>
2002/12/17
At Tue, 17 Dec 2002 19:59:00 +0900,
[#36821] Cygwinで拡張モジュールが生成されない — 堀川 久 <vzw00011@...>
こんにちは。
10 messages
2002/12/23
[#36826] ANN: ruby 1.6.8 — matz@... (Yukihiro Matsumoto)
Hello everyone,
9 messages
2002/12/24
[#36830] [ATTN] Prepare name freeze of RAA — "NAKAMURA, Hiroshi" <nakahiro@...>
みなさんこんにちは。
11 messages
2002/12/25
[#36831] Re: [ATTN] Prepare name freeze of RAA
— FUJIMOTO Hisakuni <hisa@...>
2002/12/25
こんにちは、藤本です。
[#36832] Re: [ATTN] Prepare name freeze of RAA
— "NAKAMURA, Hiroshi" <nakahiro@...>
2002/12/25
なひです。
[#36848] httpsnapshot.rb — Shin-ichiro HARA <sinara@...>
原です。
4 messages
2002/12/27
[#36856] raccのインストールについて — 齋藤雅浩 <m-saito@...4.so-net.ne.jp>
齋藤です。
6 messages
2002/12/27
[#36862] libsafeを入れるとrubyスクリプトが実行できない — Hideki Yamane <henrich@...>
8 messages
2002/12/28
[#36864] Re: libsafeを入れるとrubyスクリプトが実行できない
— Tanaka Akira <akr@...17n.org>
2002/12/28
In article <200212280626.gBS6QDL25734@mms-r00.iijmio.jp>,
[#36869] numbering of ruby-1.8.x* — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
4 messages
2002/12/29
[ruby-list:36676] WIN32OLE と IAgentCtlRequest
From:
Shusaku <tsyk@...>
Date:
2002-12-05 09:47:48 UTC
List:
ruby-list #36676
Shusakuです。
Microsoft Agent <http://www.microsoft.com/msagent/> で遊んで
いるのですが、WIN32OLEの使い方で判らない部分があります。
あるキャラクタに動作を要求すると、それはキューに貯まってから
非同期で処理されます。要求完了イベントを捕まえて、どの要求が
完了したのかを検査する場合、VBScriptでは以下のように Request
オブジェクトどうしを単純に比較すれば良いようです。
--- VBScriptサンプル (抜粋) -----------
Sub AgentControl_RequestComplete(ByVal Request)
' TypeName(Request) -> IAgentCtlRequest
' VarType(Request) -> 3 ( vbLong : 長整数型 )
' IsObject(Request) -> True ※ Automation object であり、
' IsNumeric(Request) -> True かつ、数値でもある!?!?
' Request.ID -> 126 ( 要求毎に異なる unique な ID )
' Request -> 126 ( 数値として評価すると ID と同じ値 )
If Request = gRobbySpeak Then
Robby.Hide
End If
End Sub
Sub window_OnLoad
AgentControl.Connected = True
AgentControl.Characters.Load "Robby", "robby.acs"
Set Robby = AgentControl.Characters("Robby")
Robby.Show
Set gRobbySpeak = Robby.Speak "Hello!"
End Sub
---------------------------------------
しかし、Ruby+WIN32OLEの場合は、明示的にIDプロパティで比較する
方法を探し当てるまで、やりかたが判りませんでした。
どうしてVBではIDプロパティを使わずに比較ができるのでしょうか?
暗黙的に呼び出すような仕組みになってるなのかなぁ…
RubyでもIDプロパティを読み出さずに比較する(ように見せる?)方法は
あるのでしょうか?
--- Rubyサンプル (抜粋) ---------------
agent = WIN32OLE.new('Agent.Control.1')
agent.Connected = true
agent.Characters.Load("Robby", "robby.acs")
Robby = agent.Characters("Robby")
ev = WIN32OLE_EVENT.new(agent, nil)
ev.on_event("RequestComplete") { |rRequest|
# rRequest.ole_obj_help.name -> "IAgentCtlRequest"
# rRequest.ole_obj_help.typekind -> 4 ( TKIND_DISPATCH )
# rRequest.ole_obj_help.ole_type -> "Dispatch"
# rRequest.ID -> 197 ( 要求毎に異なる unique な ID )
if rRequest.ID == $RobbySpeak.ID
Robby.Hide
end
}
Robby.Show
$RobbySpeak = Robby.Speak "Hello!"
speak = Robby.ole_method("Speak") #=> WIN32OLE_METHOD
speak.return_vtype #=> 26
speak.return_type #=> "IAgentCtlRequest"
speak.return_type_detail #=> ["PTR", "USERDEFINED", "IAgentCtlRequest"]
---------------------------------------
このRequestオブジェクトは、他に Status, Number, Description の
プロパティがあって、ID だけが 'hidden' で、VB のオブジェクト・
ブラウザでは隠されて見えないので、OLEVIEW.EXE で見ました。
--- OLE/COM Object Viewer の表示 ------
dispinterface _AgentEvents {
properties:
methods:
[id(0x0000000b)]
void RequestComplete([in] IDispatch* Request);
...
};
dispinterface IAgentCtlCharacterEx {
properties:
methods:
[id(0x0000000f)]
IAgentCtlRequest* Speak(
[in, optional] VARIANT Text,
[in, optional] VARIANT Url);
...
};
dispinterface IAgentCtlRequest {
properties:
methods:
[id(00000000), propget, hidden]
long ID();
[id(0x00000001), propget]
long Status();
...
}
--- <agtsvr.h> ------------------------
IAgentCharacter : public IDispatch
{
public:
virtual HRESULT STDMETHODCALLTYPE Speak(
/* [in] */ BSTR bszText,
/* [in] */ BSTR bszUrl,
/* [out] */ long __RPC_FAR *pdwReqID) = 0;
...
};
IAgentNotifySink : public IDispatch
{
public:
virtual HRESULT STDMETHODCALLTYPE RequestComplete(
/* [in] */ long dwRequestID,
/* [in] */ long hrStatus) = 0;
...
};
--- <agtctl.h> ------------------------
IAgentCtlCharacter : public IDispatch
{
public:
virtual /* [id] */ HRESULT STDMETHODCALLTYPE Speak(
/* [optional][in] */ VARIANT Text,
/* [optional][in] */ VARIANT Url,
/* [retval][out] */ IAgentCtlRequest __RPC_FAR *__RPC_FAR *Request) = 0;
...
};
IAgentCtlRequest : public IDispatch
{
public:
virtual /* [hidden][propget][id] */ HRESULT STDMETHODCALLTYPE get_ID(
/* [retval][out] */ long __RPC_FAR *ID) = 0;
virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Status(
/* [retval][out] */ long __RPC_FAR *Status) = 0;
...
};
---------------------------------------
--
Shusaku <tsyk@yk.rim.or.jp>