Skip to content

twinBASIC新增功能

twinBASIC通过新的数据类型、语言构造、运算符、运行时函数和项目级功能扩展了VBA语言。本页列出了有独立参考页的新增功能,按类别分组。

面向从VBA或VB6转来的开发者的更广泛概述,参见欢迎页


新数据类型

类型描述备注
LongLong8字节有符号整数在32位和64位构建中都可用;VBA限制为64位
LongPtr指针宽度有符号整数32位为4字节,64位为8字节;用于Declare语句
Decimal128位定点小数类型可作为独立声明类型使用,不仅是Variant子类型

参见数据类型获取完整类型表,功能 → 新数据类型了解这三种类型的更多详情。


新语言构造

面向对象

  • Interface -- 使用twinBASIC语法定义COM接口;实现它的类必须提供所有成员
  • CoClass -- 声明COM co-class;在编译时生成COM注册元数据
  • Inherits -- 使一个类继承另一个类的实现(仅支持单继承)
  • Implements Via -- Implements的扩展形式,将接口调度委托给成员对象,而非需要逐成员转发代码
  • Protected -- 声明类及其派生类可访问的类成员;VBA无等效功能

泛型

twinBASIC使用Of关键字支持泛型类型和泛型模块。泛型类或模块在实例化时接受一个或多个类型参数 --- 例如WinEventLogLib包中的EventLog(Of EventIds, Categories),或WinServicesLib中的ServiceCreator(Of T)

新声明关键字

  • Delegate -- 声明有类型函数指针类型;启用类型安全的AddressOf和CDecl回调
  • Enum成员范围 -- 枚举成员现在可以通过名称引用其他成员,而不仅是字面整数

控制流

  • Continue -- 跳到封闭循环的下一次迭代(Continue ForContinue DoContinue While);VBA无等效功能
  • Return -- 在一条语句中退出FunctionProperty Get并提供返回值;同时保留旧版GoSub/Return含义

属性

twinBASIC在声明和模块上使用方括号属性语法:

vb
[Documentation("Returns the absolute value of n.")]
[COMCreatable(False)]
Public Function Abs(ByVal n As Double) As Double

完整列表参见属性,包括[DllExport][DebugOnly][WindowsControl][MustBeQualified][PreserveSig]等。

内联初始化

变量可以在声明时初始化:

vb
Dim total As Long = 0
Dim greeting As String = "Hello"
Dim items() As String = Array("a", "b", "c")

参见功能 → 内联初始化

参数化New

当类暴露具有匹配参数的_Initialize方法时,New接受构造函数参数:

vb
Dim conn As New NamedPipeClientConnection("\\.\pipe\mypipe", token)

参见功能 → New


新运算符

运算符描述
AndAlso短路逻辑AND --- 左操作数为False时不求值右操作数
OrElse短路逻辑OR --- 左操作数为True时不求值右操作数
IsNotIs的逻辑反;a IsNot b等同于Not (a Is b)
LeftShift按位左移;x LeftShift n将x左移n位
RightShift按位右移;x RightShift n将x右移n位

新运行时函数

这些函数存在于VBA包中,但标准VBA中没有等效功能 --- 它们是twinBASIC新增的:

函数模块描述
CTypeConversion显式转换为调用方提供的类型;语法CType(expr, TypeName)
IfInteraction三元 --- 求值为两个值之一;仅求值所选分支
CallByDispIdInteraction通过IDispatch调度ID调用方法或属性
RaiseEventByNameInteraction按名称引发事件,以Variant数组传递参数
RaiseEventByName2Interaction按名称引发事件,使用可变长度参数列表
ObjPtrInformation返回对象的COM标识地址
VarPtrInformation返回变量的地址
StrPtrInformation返回String底层字符缓冲区的地址
IsArrayInitializedInformation返回动态数组是否已分配维度
TranslateColorInformation将OLE颜色转换为纯RGB值

额外的低级内存、线程和内省函数记录在HiddenModule节中。


项目和运行时功能

64位编译

twinBASIC可以编译为32位或64位本机代码。目标按项目设置。参见功能 → 64位编译并使用#If Win64 Then / #If Win32 Then条件编译架构特定代码。

静态链接(Fusion)

twinBASIC可以将其运行时静态链接到输出EXE中,生成无需单独运行时DLL的单文件可分发程序。参见功能 → Fusion

多线程

twinBASIC通过Thread API支持后台线程。参见功能 → 多线程

内联汇编

Emit / EmitAny函数向封闭过程生成的代码中注入原始字节序列。[Naked]属性抑制生成的序言和结语。参见功能 → 汇编

增强的API声明

除了标准Declare,twinBASIC新增了:

  • DeclareWide --- 禁用字符串参数的ANSI/Unicode转换
  • CDecl调用约定,在声明和常规函数上
  • ByVal UDT传递
  • 可变参数(CDecl + ParamArray ... As Any())参数列表

参见功能 → 增强API声明


IDE新增功能

  • CodeLens --- 过程上方的内联操作栏("运行"、"调试"、"测试"),无需离开编辑器。参见功能 → CodeLens
  • 包服务器 (TWINSERV) --- 无需离开IDE即可从中央注册表安装包。参见功能 → 导入包
  • 类型推断 --- Dim x = 1推断为LongFor Each item In collection在集合有类型时推断元素类型。参见功能 → 类型推断
  • 条件编译常量#Const#If)--- VBA集合的超集;参见编译器常量

另见

  • 数据类型 -- 所有内置类型的存储大小和取值范围
  • 功能 -- 每个twinBASIC功能的深入介绍
  • 分类索引 -- 按用途分组的语句和过程

twinBASIC及其LOGO版权为作者"韦恩"所有