导航:首页 > 源码编译 > vb脚本编译引擎

vb脚本编译引擎

发布时间:2023-04-17 11:57:52

① 楼上说的不对,VB不是解释性语言,它也是编译性语言! 什么是解释性语言什么是编译性语言还有什么语言

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序。

翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
什么是脚本语言?

1.脚本语言(javaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。
HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。
2.脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.
3.与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。
注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。JAVASCRIPT,ASP,PHP,PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
4.脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在.
脚本语言不需要编译,可以直接用,由解释器来负责解释。
5.脚本语言一般都是以文本形式存在,类似于一种命令.
举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.
你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言.

JAVA语言

java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。下图说明了它是如何工作的:

可以把Java字节码看作运行在Java虚拟机(Java VM)上的机器代码指令。每中Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。JavaVM也可以由硬件实现。

Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。

Java平台

平台是程序运行的硬件或软件环境。Java平台与大多数其它平台不同之处在于它是运行于其它基于硬件平台的纯软件平台。大多数其它平台是硬件和操作系统的结合。

Java平台由两部分组成:

* Java虚拟机(Java VM)
* Java应用程序界面(Java API)

我们已经介绍了Java VM,它是Java平台的基础,可以移植到各种基于硬件的平台上。Java API是软件组件的集合,它们提供了很多有用的功能,如图
形用户界面(GUI)。Java API被分组为相关组件的库(包)。

下图描述了一个运行在Java平台上的Java程序,如应用程序(application)或小应用程序(applet)。如图中显示的,JavaAPI和VM把Java程序从硬件依赖中分离出来。

作为一种独立于平台的环境,Java比本地代码慢一些。然而,聪明的编译器、很好地调制过的解释器和即时字节码编译器可以在不牺牲可移植性的条件下使Java的表现接近本地代码。

② vb.net和vb编程的区别

vb.net是完全面向对象的语言,支持面向对象的唯咐四个基本属性:抽芦枝象,继承,多态,封装,但vb是面向过程的语言,它只支持部分面向对象的内容像多态,接口等。从 VB 7.0 之后的版本俗称 VB.NET,来源于微软的.NET战陪山敏略,到现在为止有三个版本
VB 7.0 即VB 2002,对应.NET Framework 1.0的版本
VB 7.1 即VB 2003,对应.NET Framework 1.1的版本
VB 8.0 即VB 2005,对应.NET Framework 2.0的版本

除了语法和使用习惯的继承,VB 6.0之前的版本和VB 7.0之后的版本完全没有联系,几乎没有相同之处,两种不同体系的语言

③ VB脚本引擎问题

找一下是不是你的电脑没有了wscript.exe这个系统文件。VBS脚本需要这个程序才能运行。

④ 我是个VB初学者谁能给我解释一下VB中的 :Exp,log,是干什么的还有怎么用

继续
EXP(X):返回以E为底,X为指数的值 ;那是VB的常用函数
下面是常用的函数解释说明:

Abs 函数 返回数的绝对值。
And 运算符 执行两个表达式的逻辑连接。
Array 函数 返回含一数组的 变体 。
Asc 函数 返回字符串首字母的 ANSI 字符代码。
赋值运算符 (=) 给变量或属性赋值。
Atn 函数 返回数的反正切值。
调用语句 将控制移交 Sub 或 Function 过程。
CBool 函数 返回已被转换为 Boolean 子类型的变体的表达式。
CByte 函数 返回已被转换为字节子类型的变体的表达式。
CCur 函数 返回已被转换为货币子类型的变体的表达式。
CDate 函数 返回已被转换棚茄圆为日期子类型的变体的表达式。
CDbl 函数 返回已被转换为双精度子类型的变体的表达式。
Chr 函数 返回指定 ANSI 字符码的字符。
CInt 函数 返回已被转换为整数子类型的变体的表达式。
Class 对象 提供对已创建的类的事件的访问。
Class 语句 声明类名
Clear 方法 清除 Err 对象的所有属性设置。
CLng 函数 返回已被转换为 Long 子类型的变体的表达式。
颜色常数 颜色常数列表。
比较常数 用于比较运算的常数列表。
连接运算符 (&) 强制两个纳租表达式的字符串连接。
Const 语句 声明用于字母值的常数。
Cos 函数 返回角度的余弦值。
CreateObject 函数 创建并返回对“自动”对象的引用。
CSng 函数 返回已被转换为单精度子类型的变体的表达式。
CStr 函数 返回已被转换为字符串子类型的变体的表达式。
日期和时间常数 在日期和时间运算中用来定义星期几和其他常数的常数列表。
日期格式常数 用于日期和时间格式的常数列表。
Date 函数 返回当前系统日期。
DateAdd 函数 返回加上了指定的时间间隔的日期。
DateDiff 函数 返回两个日期之间的间隔。
DatePart 函数 返回给定日期 的指定部分。
DateSerial 函数 返回指定年月日的 日期子类型的变体 。
DateValue 函数 返回日期子类型的变体 。
Day 函数 返回日期,取值范围为 1 至 31。
Description 属性 返回或者设置说明某个错误的字符串。
Dictionary 对象 存储数据键、项目对的对象。
Dim 语句 声明变量并分配存储空间。
除法运算符 (/) 两数相除并以浮点数格式返回商。
Do...Loop 语句链塌 当条件为 True 或者当条件变为 True 时,重复一语句块。
Empty 表示尚未初始化的变量值。
Eqv 运算符 使两个表达式相等。
Erase 语句 重新初始化固定数组的元素并重新分配动态数组的存储空间。
Err 对象 含有关于运行时错误的信息。
Eval 函数 计算并返回表达式的值。
Execute 方法 根据指定的字符串,执行正则表达式的搜索。
Execute 语句 执行单个或更多的指定语句。
Exit 语句 退出 Do...Loop、For...Next、 Function 或 Sub 代码块。
Exp 函数 返回 e (自然对数的底)的多少次方。
自乘运算符 (^) 指数函数,幂为自变量。
False 关键字,其值为零。
FileSystemObject 对象 提供对计算机文件系统的访问。
Filter 函数 根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。
FirstIndex 属性 返回字符串匹配的位置。
Fix 函数 返回数的整数部分。
For...Next 语句 以指定的次数重复一组语句。
For Each...Next 语句 对于数组或集合中的每一个元素,重复一组语句。
FormatCurrency 函数 返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。
FormatDateTime 函数 返回格式化为日期或时间的表达式。
FormatNumber 函数 返回格式化为数的表达式。
FormatPercent 函数 返回格式化为百分比(乘以 100)的表达式,以 % 符号结尾。
Function 语句 声明形成 Function 过程体的名称、参数和代码。
GetObject 函数 从文件返回对“自动”对象的访问。
GetRef 函数 返回对可以绑定到事件的过程的引用。

⑤ 如何在.NET中实现脚本引擎

NET 本身提供了强大的脚本引擎,可以直接使用.NET CLR的任何编程语言作为脚本语言,如VB.NET、C#、JScript, J#等等。使用脚本引擎,我们可以动态生成任意表达式、或动态导入任意脚本文悔前件,并在任意时候执行。
经实践发现,我们可以使用至少两种不同的方式在.NET中使用脚本引擎:VsaEngine和CodeDom。
其实,CodeDom不能算是真正的脚本引擎,它实际上是编译器。但是我们完全可以利用CodeDom来模拟脚本引擎。
使用Emit方法也能达到动态生成可执行代码的目的,而且Emit生成的代码不需要编译,因此速度更快。但是Emit插入的实际上是汇编代码,不能算是脚本语言。
本文介绍如何以CodeDom方式来动态生成可执行代码。

如何在.NET中实现脚本引擎 (CodeDom篇) 沐枫网志

1. 构造一个编译器
设置编译参数
编译参数需要在CompilerParameters设置:
CompilerOptions 用于设置编译器命令行参数
IncludeDebugInformation 用于指示是否在内存在生成Assembly
GenerateInMemory 用于指示是否在内存在生成Assembly
GenerateExecutable 用于指示生成的Assembly类型是exe还是dll
OutputAssembly 用于指示生成的程序文件名(仅在GenerateInMemory为false的情况)
ReferencedAssemblies 用于添加引用Assembly
例如:
theParameters.ReferencedAssemblies.Add("迅首System.dll");

创建指定语言的编译器
编译需要由指定语言的CodeDomProvider生成。
这里列举一些.NET的CodeDomProvider:
vb.net Microsoft.VisualBasic.VBCodeProvider
C# Microsoft.CSharp.CSharpCodeProvider
jscript Microsoft.JScript.JScriptCodeProvider
J# Microsoft.VJSharp.VJSharpCodeProvider
以C#为例,要创建C#编译器,代码如下:
//.NET 1.1/1.0
ICodeCompiler compiler = new Microsoft.CSharp.CSharpCodeProvider().CreateCompiler();
//.NET 2.0
ICodeCompiler compiler = (ICodeCompiler) new Microsoft.CSharp.CSharpCodeProvider();

下面是完整的创建编译器的例子:
/// <summary>碧昌清
/// 创建相应脚本语言的编译器
/// </summary>
private void createCompiler(string strLanguage, bool debugMode, string strAssemblyFileName)
{
this.theParameters = new CompilerParameters();
this.theParameters.OutputAssembly = System.IO.Path.Combine(System.IO.Path.GetTempPath(), strAssemblyFileName + ".dll");
this.theParameters.GenerateExecutable = false;
this.theParameters.GenerateInMemory = true;
if(debugMode)
{
this.theParameters.IncludeDebugInformation = true;
this.theParameters.CompilerOptions += "/define:TRACE=1 /define:DEBUG=1 ";
}
else
{
this.theParameters.IncludeDebugInformation = false;
this.theParameters.CompilerOptions += "/define:TRACE=1 ";
}

AddReference("System.dll");
AddReference("System.Data.dll");
AddReference("System.Xml.dll");

strLanguage = strLanguage.ToLower();

CodeDomProvider theProvider;

if("visualbasic" == strLanguage || "vb" == strLanguage)
{
theProvider = new Microsoft.VisualBasic.VBCodeProvider();
if(debugMode)
theParameters.CompilerOptions += "/debug:full /optimize- /optionexplicit+ /optionstrict+ /optioncompare:text /imports:Microsoft.VisualBasic,System,System.Collections,System.Diagnostics ";
else
theParameters.CompilerOptions += "/optimize /optionexplicit+ /optionstrict+ /optioncompare:text /imports:Microsoft.VisualBasic,System,System.Collections,System.Diagnostics ";
AddReference("Microsoft.VisualBasic.dll");
}
else if("jscript" == strLanguage || "js" == strLanguage)
{
theProvider = new Microsoft.JScript.JScriptCodeProvider();
AddReference("Microsoft.JScript.dll");
}
else if("csharp" == strLanguage || "cs" == strLanguage || "c#" == strLanguage)
{
theProvider = new Microsoft.CSharp.CSharpCodeProvider();
if(!debugMode)
theParameters.CompilerOptions += "/optimize ";
}
// else if("jsharp" == strLanguage || "vj" == strLanguage || "j#" == strLanguage)
// {
// theProvider = new Microsoft.VJSharp.VJSharpCodeProvider();
// if(!debugMode)
// theParameters.CompilerOptions += "/optimize ";
// }
else
throw new System.Exception("指定的脚本语言不被支持。");

this.theCompiler = theProvider.CreateCompiler();
}

/// <summary>
/// 添加引用对象。
/// </summary>
/// <param name="__strAssemblyName">引用的文件名</param>
public void AddReference(string __strAssemblyName)
{
theParameters.ReferencedAssemblies.Add(__strAssemblyName);
}

注:
在.NET Framework 2.0中,由于CreateCompiler方法被标记作废。为避免产生编译警告,可直接返回CodeDomProvider作为编译器:
this.theCompiler = (ICodeCompiler)theProvider;

2. 编译源代码

编译源代码相当简单,只需一条语句就搞定了:
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(this.theParameters, this.SourceText);
执行后,可以从compilerResults取得以下内容:

NativeCompilerReturnValue 编译结果,用于检查是否成功
Errors 编译时产生的错误和警告信息
CompiledAssembly 如果编译成功,则返回编译生成的Assembly

示例函数:
/// <summary>
/// 编译脚本。编译前将清空以前的编译信息。
/// CompilerInfo将包含编译时产生的错误信息。
/// </summary>
/// <returns>成功时返回True。不成功为False。</returns>
public bool Compile()
{
this.theCompilerInfo = "";
this.isCompiled = false;
this.theCompiledAssembly = null;
this.theCompilerResults = this.theCompiler.CompileAssemblyFromSource(this.theParameters, this.SourceText);

if(this.theCompilerResults.NativeCompilerReturnValue == 0)
{
this.isCompiled = true;
this.theCompiledAssembly = this.theCompilerResults.CompiledAssembly;
}

System.Text.StringBuilder compilerInfo = new System.Text.StringBuilder();

foreach(CompilerError err in this.theCompilerResults.Errors)
{
compilerInfo.Append(err.ToString());
compilerInfo.Append("/r/n");
}

theCompilerInfo = compilerInfo.ToString();

return isCompiled;
}

3. 执行代码

使用Reflection机制就可以很方便的执行Assembly中的代码。
我们假设编译时使用的脚本代码 this.SourceText 内容如下:
namespace test
{
public class script
{
static public void Main()
{
MessageBox.Show("Hello");
}
}
}

则相应的执行代码为:

scriptEngine.Invoke("test.script", "Main", null);

Invoke函数内容:
/// <summary>
/// 执行指定的脚本函数(Method)。
/// 如果指定的类或模块名,以及函数(Method)、或参数不正确,将会产生VsaException/VshException例外。
/// </summary>
/// <param name="__strMole">类或模块名</param>
/// <param name="__strMethod">要执行的函数(Method)名字</param>
/// <param name="__Arguments">参数(数组)</param>
/// <returns>返回执行的结果</returns>
public object Invoke(string __strMole, string __strMethod, object[] __Arguments)
{
if(!this.IsCompiled || this.theCompiledAssembly == null)
throw new System.Exception("脚本还没有成功编译");

Type __MoleType = this.theCompiledAssembly.GetType(__strMole);
if(null == __MoleType)
throw new System.Exception(string.Format("指定的类或模块 ({0}) 未定义。", __strMole));

MethodInfo __MethodInfo = __MoleType.GetMethod(__strMethod);
if(null == __MethodInfo)
throw new System.Exception(string.Format("指定的方法 ({0}::{1}) 未定义。", __strMole, __strMethod));

try
{
return __MethodInfo.Invoke(null, __Arguments);
}
catch( TargetParameterCountException )
{
throw new System.Exception(string.Format("指定的方法 ({0}:{1}) 参数错误。", __strMole, __strMethod));
}
catch(System.Exception e)
{
System.Diagnostics.Trace.WriteLine(string.Format("执行({0}:{1})错误: {2}", __strMole, __strMethod, e.ToString()));
return null;
}
}

总结:
CodeDom可以很方便的随时编译源代码,并动态执行。虽然作为脚本引擎,它没有VsaEngine正规和方便,但作为一般应用,也够用了。并且结合Reflection机制,它的功能比VsaEngine更强大:它可以编译任何提供CompilerProvider的CLR语言(目前.NET自带的语言中都有)。
当然,它也有一些缺点:它生成的Assembly不能动态卸载。这在一般情况下不成问题,因为一个源代码只需编译一次,并载入执行,并不需要动态卸载。
假如你需要做脚本编辑器时,就要考虑这个问题,因为有可能一个脚本会因为修修改改而不停的重新编译,从而造成不停的产生新的Assembly,最后将导致内存被大量占用。要解决这个问题,需要将编译器加载到独立的AppDomain中,通过卸载AppDomain达到卸载所需的Assembly的目的。

⑥ vbscirpt

VBScript简介
VBScript全称应该是 Microsoft Visual Basic Scripting Edition,它是程序开发语言 Visual Basic家族的成员之一,它将灵活的 Script应用于更广泛的领域,包括 Microsoft Internet Explorer中的 Web客户机 Script和 Microsoft Internet Information Server中的 Web服务器Script。

如果您已了解 Visual Basic或Visual Basic for Applications,就会很快熟悉VBScript,因为 VBScript实际上是 Visual Basic的一个子集。即使没有学过 Visual Basic,只要学会VBScript,就能够使用所有的 Visual Basic语言进行程序设计。

VBScript支持ActiveX Script标准,所谓ActiveX Script标准,就是野郑晌微软的脚本语言标准,现在主要包括 VBScript和 JavaScript的微软版本---JScript以及 Perl等第三方语言。使用 ActiveX Script,浏览器和其他宿主应用程序不再需要每个 Script部件的特殊集成代码。ActiveX Script使宿主可以编译Script、获取和调用入口点及管理开发者可用的命名空间。通过 ActiveX Script,语言厂商可以建立标准的 Script运行语言。Microsoft将提供 VBScript的运行支持。 Microsoft正在与多个Internet组一起定义ActiveX Script标准以使 Script引擎可以互换。AcdveX Script可用在Mircrosoft Internet Explorer和Mircrosoft Internet Information Server(IIS)中。

Microsoft为 32位Windows API、16位Windows API和 Macintosh提供VBScript的二进制实现程序。 VBScript与 World Wide Web万维网浏览器集成在一起。VBScript和 ActiveX Script也可以在其他应用程序中作为普通Script语言使用。

VBSCRIPT不仅是一种代表着用户系统的脚本语言,它还是安全的开发工具。由于VBSCIRPT语言的强大功能、简便的开发方式已经与Visual Bascic的相通之处,使它成为了许多用户制作主页的不可缺少的工具。随着ASP技术越来越多的应用,VBSCIRPT的应用前景将会越来越好。

利用VBSCIRPT,用户可以非常方便的制作出各式各样的,具有强大功颂锋能的,和用户交互的主页,不仅可以开发现在最流行的WEB数据库,甚至可以开发在主页上的小游戏。总之,拥有了VBSCIRPT,不仅将会使用户的主页变得更加多姿多彩,也还会使主页除了可被浏览之外还增添了数据库管理和网上交互的能力。

开发工具
由于.asp和.htm文件都只不过是一些写着源代码的文本文件,虽然它的扩展名不是txt而是asp或htm。你可以使用任何一种喜欢的文字处理工具未进行开发,比如说NotePad、WordPad或TextPad。最好不要用像Word这样的大家伙,首先它的速度太慢,占用的内存太多,而且一不小心就会把写好的代码存为.DOC格式文件而不是正确的文本格式的文件。

但是建议读者最好还是学一学专用开发工具的用法,虽然刚开始的时候会花去一些时间,但掌握了它们之后,开发大型应用的时候能够减少不少麻烦。

最主要的开发工具是Visual InterDev和FrontPage 98。平时用FrontPage可以很好地将外观设计好,由于 Visual InterDev 6.0目前还不是很稳定,只有在进行站点的整体风格设定、数据库的在线设计、代码的丛启调试用 FrongPage 98力不从心的时候才使用它。Visual InterDev 6.O还有其它的好处,比如说帮助非常全面,采用Visual Basic界面等。

⑦ VB脚本就是VBS吗

是VBScript,简写就是vbs,脚本语言很重要
资料
1.脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。
HTML通常用友源于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。
2.脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.
3.与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。
注:脚本语言一般都有相应的脚链告蚂本引擎来解释执行。 他们一般需要解释器才能运行。JAVASCRIPT,ASP,PHP,PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
4.脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在.
脚本语言不需要编译,可以直接用,由解释棚埋器来负责解释。
5.脚本语言一般都是以文本形式存在,类似于一种命令.
举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.
你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言.

阅读全文

与vb脚本编译引擎相关的资料

热点内容
android平滑滚动效果 浏览:841
什么是编译器指令 浏览:219
微控制器逻辑命令使用什么总线 浏览:885
程序员在学校里是学什么的 浏览:601
oraclejava数据类型 浏览:890
程序员考注册会计师 浏览:957
怎么使用access的命令按钮 浏览:899
有点钱app在哪里下载 浏览:832
博途v15解压后无法安装 浏览:205
什么是根服务器主机 浏览:438
安卓手游怎么申请退款 浏览:555
安卓系统如何分享网页 浏览:278
ad如何编译pcb工程 浏览:414
除了滴滴app哪里还能用滴滴 浏览:399
截图怎么保存文件夹然后压缩 浏览:8
幻影服务器怎么样 浏览:28
具体哪些广东公司招程序员 浏览:871
嵌入式编译器教程 浏览:307
ssl数据加密传输 浏览:87
51单片机定时器方式2 浏览:332