Skip to content

本指南介绍twinBASIC中的内置编译器常量。它包含VBA文档中列出的常量,即使它们未定义也可以使用,因为未定义的编译器常量始终可用,但其值为0。

Win16

用途: 指示16位Windows兼容平台。
值: 始终为0(False);不支持16位Windows。

Win32

用途: 指示32位兼容Windows平台
值: 在受支持的Windows平台上始终为1(True),无论是32位还是64位。

Win64

用途: 指示64位Windows AMD64平台。
值: 编译器处于32位模式时为0(False),处于64位模式时为1(True)。

VBA6

用途: 指示与VBA6语法的兼容性。
值: 始终为1(True)。

VBA7

用途: 指示与VBA7语法的兼容性。
值: 始终为1(True)。

MAC

用途: 指示是否在MacOS平台上运行。
值: 始终为0(False)。目前不支持Mac,但将来会改变。

TWINBASIC

用途: 指示与twinBASIC语法的兼容性。
值: 始终为1(True)。

TWINBASIC_BUILD

用途: 提供一个Long值,表示当前twinBASIC构建号。
值: 目前与"BETA"编号相同,例如Beta 610的值为610。

TWINBASIC_BUILD_TYPE

用途: 允许根据项目是exe、dll还是ocx进行条件编译。
值: 一个String,可以是"Standard EXE"、"Standard DLL"、"ActiveX DLL"或"ActiveX Control",由项目设置中的"Build Type"选项决定。

用法

使用方式遵循在标准If/Else/ElseIf条件前加井号号的标准语法。例如,要区分32位和64位VBA与64位twinBASIC:

vb
#If VBA7 Then
    'We're in either VBA7 or twinBASIC
    #If Win64 Then
        'We're in either 64bit VBA7 or 64bit twinBASIC
        #If TWINBASIC Then
            'We're in 64bit twinBASIC
            #If TWINBASIC_BUILD_TYPE = "ActiveX Control" Then
                'And we're building an OCX
            #End If
        #Else
            'We're in 64bit VBA7
        #End If
    #Else
        'We're in either 32bit VBA7 or 32bit twinBASIC
        #If TWINBASIC Then
            'We're in 32bit twinBASIC
        #Else
            'We're in 32bit VBA7
        #End If
    #End If
#Else
    'We're in VB6 or VBA6. Win64 will always be False by default. TWINBASIC will always be False by default.
#End If

或者更简单地,判断是否使用PtrSafeDeclareWide或其他tB功能:

vb
#If VBA7 Then
    #If TWINBASIC Then
        'PtrSafe DeclareWide declares, if desired, also inline comments and `[ TypeHint() ]`, and function attributes.
    #Else
        'PtrSafe declares not using DeclareWide or any new syntax
    #End If
#Else
    'Classic VB6/VBA6 declares without PtrSafe or other new syntax
#End If

WARNING

提醒:编译器常量不是Boolean值,因此不应使用#If Not Win64 Then这样的语法,因为结果可能不符合预期。例如,该表达式在32位和64位模式下都会求值为True,而你可能期望在64位下为False以使用仅限32位的代码。\

如果希望将它们视为Boolean,可以使用CBool()函数,例如#If Not CBool(Win64) Then

外观

tB编辑器具有实时显示编译器常量是否处于活动状态的有用功能。#If块中不会在当前设置下执行的代码会显示为灰色。注意,与VBx不同,不活动的代码不会进行错误检查。

例如,在32位模式下:
image

切换到64位模式后:
image


VB6、VBA、VBA6和VBA7是Microsoft Corporation的商标。
MacOS是Apple, Inc.的商标。

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