VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -