0

好的,我在这里做错了什么?我正在尝试以这种方式包含一个带有类的vbscript:

脚本.VBS:

set inc = createobject("script.runner")
inc.Include "class"
set x = new test
x.msg' here i get the error 'undefined class'!

注册的 .wsc 文件:

<?xml version="1.0"?>
<component>
<registration
description="wsc"
progid="script.runner"
version="1.00"
classid="{f65e154c-43b3-4f8f-aa3d-535af68f51d1}"
>
</registration>
<public>
<method name="Include">
<PARAMETER name="Script"/>
</method>
</public>
<script language="VBScript">
<![CDATA[
Sub Include(Script)
ExecuteGlobal(CreateObject("scripting.filesystemobject").OpenTextFile(Script & ".vbs", 1).Readall & VBNewLine)
End Sub
]]>
</script>
</component>

类.VBS:

class test
public sub msg
msgbox "hi"
end sub
end class

我在想如果我要使用类或其他东西,也许我需要在 wsc 文件中定义它?我不知道..

谢谢你的帮助!

4

2 回答 2

0

VBscript 的 Execute(Global) 和 .COM 是非常不同的代码重用方式。你不应该混合它们。

.wsc 允许您创建一个对象并使用它的方法和属性。这样的方法(工厂)可能会创建并返回另一个对象。所以如果你添加

<method name="mkTest">
</method>
...
Function mkTest()
  Set mkTest = New test
End Function

到您的 .wsc 和

set x = inc.mkTest
x.msg

对于您的 .vbs,整个繁琐的工作都将“起作用”。

您应该考虑一下您在现实世界中的任务,阅读一本关于 .COM 的好书,并提出一个不混合异构技术的简单策略(可能是这里概述的 Sub Include()/ExecuteGlobal 方法)。

于 2014-11-21T21:49:19.333 回答
0

做过这个:

脚本

set inc = createobject("script.runner")
inc.Include "C:\Users\GEEK\Desktop\small"
set x = inc.AddClass("test")
x.msg' here i get the error 'undefined class'!

内部wsc方法

Function AddClass(ClassName)
execute("Set AddClass = New " & ClassName)
end Function

和 Ekkehard.Horner,你是对的。我只是好奇如何解决问题,即使有更简单的方法来做某事^^

感谢所有的帮助!

问候

于 2014-11-21T22:49:35.407 回答