投稿日 | : 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>