【问题标题】:What is the purpose of using a prefix with WScript.CreateObject?在 WScript.CreateObject 中使用前缀的目的是什么?
【发布时间】:2017-12-17 03:26:09
【问题描述】:

有谁知道在使用WScript.CreateObject时使用前缀的实际目的吗?

我有一个 C++ COM 项目示例,它有一个 VB 脚本文件,该文件调用 C++ dll 项目中的 COM 对象的方法。

Function Testing_Event(Text)
  WScript.Echo CStr(Text)
End Function

Dim Test
Set Test = WScript.CreateObject("Hello.World", "Testing_")
Test.Method("Hello World!")

我还发现了另一个answer,它具有相同的调用行为,但带有前缀。

上述方法适用于 VB 脚本,但如果我删除前缀,wscript 会运行但不会像以前那样输出。

请谁能解释一下Testing_ 前缀的用法?是否可以停止使用该前缀并像Hello.World 一样正常调用此方法?我是否需要对示例的源文件进行任何更改才能在没有此前缀的情况下调用此方法?

【问题讨论】:

    标签: c++ vbscript com createobject


    【解决方案1】:

    Testing_ 是一个事件前缀,因此在您的示例中,当 Test 引发一个名为 Event 的事件时,prefix+event_name 映射到 Testing_Event 并调用该本地过程。

    如果省略前缀,则不会沉没任何事件,因此如果需要事件,则需要前缀。

    这样做的理由是它允许同一类的多个实例通过指定不同的前缀来引发它们自己的独立事件。

    【讨论】:

    • 非常感谢!我明白了很多,但是回显消息Text 变量呢?这个变量是由这个Test.Method分配的吗?
    • Test.Method("Hello World!") 调用 COM 服务器中的 Method() 方法,如果该方法引发名为 Event 的事件(将相同的字符串作为参数传回),则调用 Testing_Event 并执行回声。
    • 好的,如果我想在没有这个前缀的情况下仍然这样做(只是为了理解),在从CreateObject 中删除它之前我需要做什么?可以通过一些源代码编辑来完成吗?在我理解它是如何工作的之前,我希望使用这个源代码。
    • 如果不指定前缀,您将无法捕获事件。如果您真的不想捕获事件,请删除前 3 行并使用 WScript.CreateObject("Hello.World"),然后您可以致电 Test.Method("Hello World!")
    • 让你的方法返回一个字符串?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多