如果您想以任何 COM(ic) 语言编写组件并以任何 COM(ic) 语言使用它们 - 即使没有注册 - 请使用 Windows Script Components。
更新:
来自您的评论
所以有时我将大脚本拆分为较小的 vbscript,把
将它们放入一个文件夹并制作一个读取所有内容的主脚本
该文件夹并执行脚本中的内容。在主文件中
是一个名为“include”的子(请参阅我的问题中的示例),以便我可以
包括文件,例如c++ 矿石。问题是
每次我这样做时,我都必须在
main vbscript 所以我想知道我是否可以在 vb6 中制作一个 activeX dll 所以
我只能这样做:createobject("blah.include").include
“文件路径”...
我假设您的实际问题是通过 VBScript 中的模块/库重用代码。这可以在没有 MS ScriptControl、vb6 和 dll 开销的情况下实现。
(1) 使用类似
Dim gsLibDir : gsLibDir = "M:\lib\kurs0705\"
Dim goFS : Set goFS = CreateObject( "Scripting.FileSystemObject" )
ExecuteGlobal goFS.OpenTextFile( gsLibDir & "BaseLib.vbs" ).ReadAll()
如果您的所有可重用代码都在 BaseLib.vbs 中(如果您没有将代码分发到该文件夹中的许多较小文件中,只是为了从那里“读取所有内容”的特权),那么您就是完成。
(2) 如果您有一些专门的库(数据库、XML、MS Office 自动化、Libre Office 自动化等)并希望根据您的 main.vbs 的任务从该集合中进行选择,
要么(a)添加几行像
ExecuteGlobal goFS.OpenTextFile( gsLibDir & "XmlLib.vbs" ).ReadAll()
或 (b) 将 Sub include(suitableparms) 放入 BaseLib.vbs 并调用它
includeLibs Array( _
"§LibDir§ReLib.vbs" _
, "§LibDir§TxtManLib.vbs" _
, "§LibDir§ADOConst.vbs" _
, "§LibDir§ADOLib.vbs" _
, "§LibDir§WMILib.vbs" _
, "§LibDir§DNLib.vbs" _
, "§LibDir§XPLLib.vbs" _
)
当然,这样的 Sub 应该提供比
更多的功能
Sub Include(File)
ExecuteGlobal(CreateObject("SCRIPTING.FILESYSTEMOBJECT").OPENTEXTFILE("FILENAME & ".VBS", 1).READALL & vbNewLine)
End Sub
which - 除了引用和名称错误 - 相当于 (a) 有额外的调用开销。就像没用/臃肿一样
sub includeFile (fSpec)
dim fileSys, file, fileData
set fileSys = createObject ("Scripting.FileSystemObject")
set file = fileSys.openTextFile (fSpec)
fileData = file.readAll ()
file.close
executeGlobal fileData
set file = nothing
set fileSys = nothing
end sub
(参见here,thought 的更多食物)
因此,在设计 Sub include() 上付出一些努力,它可以处理包含的文件中可能出现的语法错误,避免多次加载同一个模块,并提供额外的有效负载(搜索 lib 文件夹列表,保证卸载的有序序列,进行初始化/清理,...) - 或坚持(a)。
(3) 如果你想混合语言并使用 COM 的特性,忘记 ExecuteGlobal 并使用 .wsf 和 .wsc 文件。如果您“对 XML 一无所知并且...没有使用 wsc 文件以及如何正确注册它们的经验”,那么您将不得不了解这些奇怪的野兽,最好通过研究文档。