[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/05/15(Tue) 12:03
投稿者名:WEBプログラマー
Eメール:
URL :
タイトル:
VBで作成したDLLについて
この掲示板に似合わない質問であれば申し訳ありません

現在、自分はHTML+JavaScriptでWEBページを作成しております

そこで、VB6.0で作成したDLLのイベントを取得したいのですが
HTMLから取得することができません

ステップ実行でVB側ではイベントを呼ぶ
RaiseEventまではたどり着いているとのこと(よくわかっていませんが)

VBのイベントはHTMLから呼ぶことが可能なのでしょうか?

板違いであれば申し訳ありません

投稿時間:2007/05/15(Tue) 16:04
投稿者名:WEBプログラマー
Eメール:
URL :
タイトル:
Re: VBで作成したDLLについて
> VBのイベントはHTMLから呼ぶことが可能なのでしょうか?

VBチームと確認をしたのですが、イベントは取ることはできませんでした

聞いておいてあれなのですが、HTMLからイベントを取れない以上、別の方向でいくことに
なりましたので、ひとまず閉めさせていただきます

もし、考えてくれた人とかいらしたら申し訳ありません

投稿時間: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>