欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

vbs中怎么能getref一个vb6类模块创建的activex dll中的事件?

更新时间: 2014-01-05 01:52:37 责任编辑: Author_N1

 

VBS中如何能GetRef一个VB6类模块创建的ActiveX DLL中的事件???
VB6 ActiveX DLL 代码,(工程名为:“QTEST”,类模块名为:“MyPlugin”):
VB code

Public Event TestEvent()

Public Function MyTest(ByVal Number1 As Variant, ByVal Number2 As Variant) As Long
    MyTest = Number1 + Number2
    RaiseEvent TestEvent
End Function



在VBS中准备调用的代码:
VBScript code

    Dim EvObj
    Set EvObj = CreateObject("Qtest.MyPlugin")
 
    EvObj.TestEvent = GetRef("EvObj_TestEvent")
    Sub EvObj_TestEvent()
    msgbox "EvObj_TestEvent"
    End Sub



但结果却并不好用。。。请问需要怎么做才可以调用这个ActiveX DLL 的TestEvent事件呢??
谢谢!!!

--参考方法--
我查阅了大量资料,始终找不到用标准VB事件处理调用接口实现Script响应Win32程序事件的方法。最后得出的结论是:

VBScript本来就是设计用来与Web文档等活动文档一起工作的,在VBScript中像WithEvents等许多特性都不被支持。所以,要让VBScript来响应Win32程序事件,必须提供额外的接口,基本上就是用Callback方法。

以下为我用Callback方法实现的VBScript事件处理程序:

VB6 ActiveX DLL(工程名:“QTEST”,类模块名:“MyPlugin”): 
VB code
Option Explicit
Private ScriptListener As Object
Public Event TestEvent()

Public Function AddHandler(Caller) As Boolean
    On Error GoTo AddHandlerError
    Set ScriptListener = Caller
    AddHandler = True
    Exit Function
    
AddHandlerError:
    AddHandler = False
    Exit Function
End Function

Public Function RemoveHandler(Caller) As Boolean
    On Error GoTo RemoveHandlerError
    If ScriptListener Is Caller Then
        Set ScriptListener = Nothing
        RemoveHandler = True
    Else
        RemoveHandler = False
    End If
Exit Function

RemoveHandlerError:
    RemoveHandler = False
    Exit Function
End Function

Public Function MyTest(ByVal Number1 As Variant, ByVal Number2 As Variant) As Long
    MyTest = Number1 + Number2
    RaiseEvent TestEvent
    If Not ScriptListener Is Nothing Then ScriptListener.FromEvent MyTest
End Function

--参考方法--
不能用 Class 那能不能用 GetObject 呢
我只在 WSH 环境中测试了一下 WSC

把下面代码保存成 C:\Listener.WSC
XML code

<?xml version="1.0" encoding="UTF-8"?>
<?component error="1" debug="1" ?>
<component>
  <comment>Alvin(ialvin.cn)</comment>
  <registration description="Connection" progid="Alvin.Listener" version="1.00"></registration>
  <public>
    <property name="Action"><put/></property>
    <method name="Fire"></method>
  </public>
<script language="VBScript"><![CDATA[
Dim theAction

Function put_Action(ByRef value)
    Set theAction = value
End Function

Function Fire()
    Call theAction()
End Function
]]></script>
</component> 			
			
		
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:52:37
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/2395/
本文WWW.DOC100.NET DOC100.NET版权所有。