Включая классы с файлом wsc

Хорошо, что я здесь делаю не так? я пытаюсь включить VBScript с классом внутри этого пути:

SCRIPT.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>

CLASS.VBS:

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

Я подумал, может быть, мне нужно определить его в файле WSC, если я собираюсь использовать классы или что-то? я не знаю..

Спасибо за любую помощь!

2 ответа

Решение

Execute(Global) и.COM в VBscript - это очень разные способы повторного использования кода. Вы не должны смешивать их.

.Wsc позволяет вам создать один объект и использовать его методы и свойства. Такой метод (фабрика) может создавать и возвращать другой объект. Так что, если вы добавите

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

на ваш.wsc и

set x = inc.mkTest
x.msg

к вашим.vbs, весь rigmarole будет "работать".

Вы должны подумать о своей реальной задаче, прочитать хорошую книгу о.COM и придумать простую стратегию, которая не смешивает разнородные технологии (возможно, подход Sub Include()/ExecuteGlobal, описанный здесь).

Сделал это:

скрипт

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

и Эккехард. Ужас, ты прав. Мне просто интересно, как решить проблему, даже если есть более простые способы сделать что-то ^^

Спасибо за помощь!

С уважением

Другие вопросы по тегам