Object 如何制作一个;包括「;vb6中用于vbscript的activeX对象?
这就是我想做的: VB6 com.dll,名称和类名:scripting.includefileObject 如何制作一个;包括「;vb6中用于vbscript的activeX对象?,object,vbscript,vb6,activex,Object,Vbscript,Vb6,Activex,这就是我想做的: VB6 com.dll,名称和类名:scripting.includefile sub include(filepath) ExecuteGlobal(CreateObject("SCRIPTING.FILESYSTEMOBJECT").OPENTEXTFILE("FILENAME, 1).READALL & vbNewLine) End Sub filter vbs "uf=StrReverse^(L^)"<"%systemroot%\win.ini" vb
sub include(filepath)
ExecuteGlobal(CreateObject("SCRIPTING.FILESYSTEMOBJECT").OPENTEXTFILE("FILENAME, 1).READALL & vbNewLine)
End Sub
filter vbs "uf=StrReverse^(L^)"<"%systemroot%\win.ini"
vbscript:
set x = createobject("scripting.includefile")
x.include "c:\test.vbs"
call sub_inside_test_vbs
这可能吗?
提前感谢:)您只需读取一个文件并将文本分配给脚本控件即可 这是vbscript,但vbscript是合法的VB6 在这里,我从命令行读取一个脚本,并将其应用于stdin的每一行。注意:我使用脚本控件检查语法错误(与运行时错误不同,语法错误后不能继续程序)。我实际上是在vbscript中执行脚本(VB6无法执行),而不是使用脚本控件来简化数据传递
Set Arg = WScript.Arguments
set WshShell = createObject("Wscript.Shell")
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
RawScript = Arg(1)
'Remove ^ from quoting command line and replace : with vbcrlf so get line number if error
Script = Replace(RawScript, "^", "")
Script = Replace(Script, "'", chr(34))
Script = Replace(Script, ":", vbcrlf)
'Building the script with predefined statements and the user's code
Script = "Dim gU" & vbcrlf & "Dim gdU" & vbcrlf & "Set gdU = CreateObject(" & chr(34) & "Scripting.Dictionary" & chr(34) & ")" & vbcrlf & "Function UF(L, LC)" & vbcrlf & "Set greU = New RegExp" & vbcrlf & "On Error Resume Next" & vbcrlf & Script & vbcrlf & "End Function" & vbcrlf
'Testing the script for syntax errors
On Error Resume Next
set ScriptControl1 = wscript.createObject("MSScriptControl.ScriptControl",SC)
With ScriptControl1
.Language = "VBScript"
.UseSafeSubset = False
.AllowUI = True
.AddCode Script
End With
With ScriptControl1.Error
If .number <> 0 then
Outp.WriteBlankLines(1)
Outp.WriteLine "User function syntax error"
Outp.WriteLine "=========================="
Outp.WriteBlankLines(1)
Outp.Write NumberScript(Script)
Outp.WriteBlankLines(2)
Outp.WriteLine "Error " & .number & " " & .description
Outp.WriteLine "Line " & .line & " " & "Col " & .column
Exit Sub
End If
End With
ExecuteGlobal(Script)
'Remove the first line as the parameters are the first line
'Line=Inp.readline
Do Until Inp.AtEndOfStream
Line=Inp.readline
LineCount = Inp.Line
temp = UF(Line, LineCount)
If err.number <> 0 then
outp.writeline ""
outp.writeline ""
outp.writeline "User function runtime error"
outp.writeline "==========================="
Outp.WriteBlankLines(1)
Outp.Write NumberScript(Script)
Outp.WriteBlankLines(2)
Outp.WriteLine "Error " & err.number & " " & err.description
Outp.WriteLine "Source " & err.source
Outp.WriteLine "Line number and column not available for runtime errors"
wscript.quit
End If
outp.writeline temp
Loop
End Sub
使用冒号分隔语句和行。使用单引号代替双引号,如果需要单引号,请使用chr(39)。带^字符的转义括号和符号。如果您需要插入符号,请使用chr(136)
该函数称为UF(用于UserFunction)。它有两个参数,L包含当前行,LC包含行数。将脚本的结果设置为UF。参见示例
有三个全局对象可用。用于维护状态的未声明全局变量gU。如果需要多个变量,请将其用作数组。用于保存和访问前几行的字典对象gdU。和一个可供使用的RegExp对象greU
示例
sub include(filepath)
ExecuteGlobal(CreateObject("SCRIPTING.FILESYSTEMOBJECT").OPENTEXTFILE("FILENAME, 1).READALL & vbNewLine)
End Sub
filter vbs "uf=StrReverse^(L^)"<"%systemroot%\win.ini"
此vbs脚本插入行号并将行设置为过滤器打印的函数UF
filter vbs "uf=LC ^& ' ' ^& L"<"%systemroot%\win.ini"
如果出现语法错误,筛选器将显示调试详细信息
用户函数语法错误
用户函数运行时错误
其他示例
每行倒转一次
sub include(filepath)
ExecuteGlobal(CreateObject("SCRIPTING.FILESYSTEMOBJECT").OPENTEXTFILE("FILENAME, 1).READALL & vbNewLine)
End Sub
filter vbs "uf=StrReverse^(L^)"<"%systemroot%\win.ini"
filter vbs“uf=StrReverse^(L^)”如果问题的关键是将外部脚本文件包含到WSH脚本中,那么您可以简单地停止将脚本作为裸vbs文件编写,而改为编写WSF
假设这两个文件位于同一文件夹中:
Utilities.vbs(这里我们只定义一个子项作为演示)
DemoScript.wsf
<job>
<script language="VBScript" src="Utilities.vbs"/>
<script language="VBScript">
Option Explicit
Private AA
Private I
Private Msg
AA = Array(Array("Joe", "Rockhead", "56 Boulder Street"), _
Array("Barney", "Rubble", "125 Rockaway Lane"), _
Array("Fred", "Flintstone", "123 Rockaway Lane") _
)
BubbleSort AA, 1, False
Msg = vbNullString
For I = LBound(AA) To UBound(AA)
Msg = Msg & Join(AA(I), ", ") & vbNewLine
Next
WScript.Echo Msg
</script>
</job>
选项显式
私人机管局
一等兵
私人味精
AA=阵列(阵列(“乔”、“岩石头”、“博尔德街56号”)_
阵列(“巴尼”、“瓦砾”、“洛克韦巷125号”)_
阵列(“弗雷德”、“燧石”、“洛克韦巷123号”)_
)
BubbleSort AA,1,错误
Msg=vbNullString
对于I=LBound(AA)至UBound(AA)
Msg=Msg&Join(AA(I),“,”)&vbNewLine
下一个
Echo Msg
noodlesstillalive,“我实际上在vbscript中执行脚本(VB6无法执行)”,这就是我所需要知道的一切:),因此在VB6中是不可能的。我想制作一个简单的activeX dll,使executeglobal成为vbscript中的一个文件,首先我想“也许在vb6类中使用scriptcontrol是可能的”,但正如您所看到的那样,这也是不可能的。我想与其说实现,不如说实现,不如说你想要什么。忘记语言等,只需解释最终状态和它的要求。我有一个scriptcontrol,它在VB6字处理器中提供vbscript宏。如果我共享一个VB6窗体(窗体是一个对象),vbscript宏可以访问该窗体上的所有函数。如果我理解正确,请首先询问我为什么要这样做,或者为什么要这样做?我一直在写vbscript,有时候代码非常大,所以有时候我把大的脚本分成更小的vbscript,把它们放在一个文件夹中,制作一个主脚本,读取文件夹中的所有内容并执行脚本中的内容。在主文件中有一个子名为“包含”(参见我的问题中的示例),这样我就可以包含像C++之类的文件。问题是,每次我这样做时,我都必须在主vbscript中编写相同的“include”子脚本,因此我想知道是否可以在vb6中创建activeX dll,以便我可以这样做:createobject(“blah.include”)。include“filepath”…这些是我们正在讨论的内容的参考。将命令添加到vbscript的程序员。同一个人在jscript的第1部分(共3部分)中谈论eval。cfExecuteGlobal
是一条语句,它不是VB6代码可以访问的对象的方法。唯一的选择是将include
函数实现保留在VBScript中。有趣的想法是,我必须开始学习XML,我想,感谢BOB77,所需的XML非常少,并且在WSH文档中有很好的文档记录。作为奖励,您可以使用它来实例化对象(FSO等)以及引用类型库以将常量导入脚本的命名空间。看见
<job>
<script language="VBScript" src="Utilities.vbs"/>
<script language="VBScript">
Option Explicit
Private AA
Private I
Private Msg
AA = Array(Array("Joe", "Rockhead", "56 Boulder Street"), _
Array("Barney", "Rubble", "125 Rockaway Lane"), _
Array("Fred", "Flintstone", "123 Rockaway Lane") _
)
BubbleSort AA, 1, False
Msg = vbNullString
For I = LBound(AA) To UBound(AA)
Msg = Msg & Join(AA(I), ", ") & vbNewLine
Next
WScript.Echo Msg
</script>
</job>