描述
当前结果
我的脚本“name1”和“name2”正在不同的tclsh窗口中执行 因此,“name2”不熟悉“name1”
的变量预期结果
“name1”和“name2”在同一个tclsh窗口中执行
注释
我尝试使用这些命令,但我不知道它在VBScript中的语法
Tcl_Create tclHandler, TCL_Eval状态,tclHandler,
如果在VBScript或任何其他
中使用这些命令,请举例说明由于
的VBScript:
#$language = "VBScript"
#$interface = "1.0"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
crt.Screen.Synchronous = True
Sub Main
dim shell
set shell=createobject("wscript.shell")
shell.run "tclsh e:\RunTCL\name1.tcl"
crt.Sleep 10000 ' or any VBScript commands
shell.run "tclsh e:\RunTCL\name2.tcl"
End Sub
包req SpirentTestCenter
设置hProject [stc :: create project]
设置hTxPort [stc :: create port -under $ hProject -location //192.168.0.243/10/17 -useDefaultHost False]
设置hRxPort [stc :: create port -under $ hProject -location //192.168.0.243/10/25 -useDefaultHost False]
tcl84.dll及其命令“TCL_Create tclHandler”的新代码:
#$language = "VBScript"
#$interface = "1.0"
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
crt.Screen.Synchronous = True
Sub Main
Dim wscriptTCL
tclHandler = 0
set wscriptTCL =CreateObject("C:\Tcl\bin\tcl84.dll")
TCL_Create tclHandler, wscriptTCL, 1
puts "Importing STC API"
TCL_Eval Status, tclHandler, "package req SpirentTestCenter"
puts "Creating API objects set"
TCL_Eval Status, tclHandler, "set hProject [stc::create project]"
puts "Connecting to STC ports"
TCL_Eval Status, tclHandler, "set hTxPort [stc::create port -under $hProject -location //10.110.10.243/8/9 -useDefaultHost False]"
src.Sleep 100000
TCL_Eval Status, tclHandler, "set hRxPort [stc::create port -under $hProject -location //10.110.10.243/8/10 -useDefaultHost False]"
因此,我看到此消息:错误:ActiveX组件无法创建对象'c:\ tcl \ bin \ tcl84.dll'
我可以使用2个选项:
但没人在工作
好消息,它开始有效,但是,我更愿意通过API执行单独的TCL文件
shell.run "tclsh"
crt.Sleep 10000
shell.AppActivate "tclsh"
shell.SendKeys("TCL command")
答案 0 :(得分:0)
tcl84.dll
不是提供COM类的东西。您不能使用像这样的VBScript CreateObject
调用来创建Tcl解释器。 VBScript没有直接从DLL访问导出函数的机制,因此除非执行tclsh
或wish
进程,否则无法从VBScript运行Tcl代码。
每次执行tclsh.exe scriptfile
时,您都会创建一个新的子进程。它将运行您的脚本但是当它退出时,进程终止并且除非您读取标准输出或将信息写入文件以保留它,否则有关它的所有内容都将丢失。所以运行第二个脚本当然不会知道第一个脚本。
将两个tcl脚本一起运行的一种方法是创建一个脚本,该脚本使用tcl source
命令将两个脚本加载到单个解释器中。另一种方法可能是读取第一个脚本的输出,解析出您需要的值,并将这些值作为命令行参数传递给第二个脚本。或者你可以让第一个脚本编写一个tcl命令文件,当在第二个进程中获取时,它将更新你需要的变量。
您的最后一个示例是创建单个进程并通过模拟键击进行通信。这非常缓慢且容易出错。有一个winsend包可以让你从vbscript向tcl解释器发送消息。 TWAPI
中可能还有其他一些可以让您注册解释器以进行外部访问。