投稿時間:2007/05/15(Tue) 17:56 投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:Re: VBで作成したDLLについて
# 今更だけど。
HTML 側からイベントを発生させるのが目的なら、それは VB 側の仕事です。 スクリプトからイベントを強制発火させたいのなら、RaiseEvent するための メソッドを用意して、それを呼び出すという方向で。
=============== Option Explicit
Public Event Hoge() Public Sub FireHoge() RaiseEvent Hoge End Sub ===============
HTML 側にて、発生したイベントを受け取るのが目的なら、DLL を object タグで生成して、 HTML からは automagic 等で連結すれば OK です。 http://www.microsoft.com/japan/msdn/columns/scripting/scripting04092001.aspx
=============== <!-- classid は、DLL のものに合わせること --> <object id="Class1" classid="clsid:〜〜〜" events="true" style="display:none" ></object>
<script type="text/javascript"> function Class1::Hoge() { alert("Hogeイベントが発生(JS)"); } </script>
<script type="text/vbscript"> Sub Class1_Hoge() MsgBox "Hogeイベントが発生(VBS)" End Sub </script>
<input type="button" value="Hoge発生" onclick="Class1.FireHoge()"> ===============
object タグに対する automagic を使わず、JScript の new ActuveXObject で 生成したオブジェクトのイベントを利用するとなると、そのままでは対応できません。
この場合、もし DLL 側を修正できるなら、Function オブジェクトをデリゲートとして、 デフォルトメソッド経由で呼び出してもらうという回避策が使えます。
=============== Option Explicit Public Event Hoge() Private mHoge As Variant Public Property Get OnHoge() As Variant SetVar OnHoge, mHoge End Property Public Property Let OnHoge(ByVal v As Variant) SetVar mHoge, v End Property Public Property Set OnHoge(ByVal v As Variant) SetVar mHoge, v End Property Private Sub SetVar(ByRef target As Variant, ByVal value As Variant) If IsObject(value) Then Set target = value Else target = value End If End Sub
Public Sub FireHoge() If IsObject(OnHoge) Then CallByName OnHoge, "", VbMethod RaiseEvent Hoge End If End Sub =============== <input type="button" value="Hoge発生(JS)" onclick="fnClick()"> <input type="button" value="Hoge発生(VBS)" onclick="procClick()">
<script type="text/javascript"> function fnClick() { var o = new ActiveXObject("Project1.Class1"); o.OnHoge = fnHoge; o.FireHoge(); } function fnHoge() { alert("Hogeイベントが発生(JS)"); } </script>
<script type="text/vbscript"> Sub procClick() Dim o Set o = CreateObject("Project1.Class1") Set o.OnHoge = GetRef("procHoge") o.FireHoge End Sub Sub procHoge() MsgBox "Hogeイベントが発生(VBS)" End Sub </script>
|