VisualFreeBasic和VisualBasic6不同点

2026-1-21 / 0 评论 / 103 阅读

这里说的是 代码 不同,其它不同,比方界面,一看就知道,无需说明。
不同点很多本人想到什么再添加说明

1. COM:VB6支持良好,VFB不支持

VFB 没有原生支持COM,因此使用COM非常麻烦,不是说不能用,只是好麻烦,因此,用到COM,包括 OCX 控件,请使用 VB6,不要用VFB。同时包括 VB6 里的引用,也是 COM 的,VFB 是不支持的,使用不了。

2. 调试代码:VB6 完胜 VFB

  • VB6 边运行边调试,一行一行执行,修改代码立即生效,可以继续执行代码
  • VFB print 结果,基本上都是依靠编译运行然后查看打印结果,当然可以一行一行调试执行,但每次修改需要重新编译运行,和VB6相差甚远,也无法做到和VB6一样的丝滑。

3. 模块 VB6独立,VFB统一

VB6:每个模块独立,一个窗口也是一个模块,还有类模块,互相独立
VFB:所有模块都属于同一个模块,包括窗口里的代码,可以说只有一个模块。
在VB6里调用窗口里的代码,需要先加载窗口,VFB里是直接调用,不需要窗口。

4. 变量定义

VB6:可以不设置类型 Dim 变量 甚至不用先声明变量
VFB:必须先声明变量,必须设置类型 Dim 变量 as long

5. 全局变量定义

VB6 :Public 变量 as long
VFB: Dim Shared 变量名 As Long

6. 局部变量

’VB6  不管那里定义,后面都有效
Sub Myaaa() 
   Dim a As Long 
   If a = 0 Then 
      Dim b As Long 
   End If 
   Print a,b   
End Sub
'VFB 每给配对中定义的变量,只存在配对中,超出就释放,就无效
Sub Myaaa() 
   Dim a As Long 
   If a = 0 Then 
      Dim b As Long 
      Print b  'END IF 结束后 b 变量会被释放
   End If 
   Print a '这里无法使用B变量 
End Sub

7. 变量初始化

   'VB6
   Dim a As Long 
   a = 100
   'VFB
   Dim a As Long = 100
   Dim b(3) As Long ={1,2,3,4}

8. 多变量声明

   'VB6
   Dim a As Long,b As Long ,c As Long  
   'VFB
   Dim As Long a, b, c
   '还可以初始化
   Dim As Long a=1,b=2,c=3

9. 范围块局部变量 VB6不支持,VFB支持

Dim As Integer x = 5, y = 2
Print "x ="; x; ","; "y ="; y
Scope
    Dim x As Integer = 3
    Print "x ="; x; ","; "y ="; y
    Scope
        Dim y As Integer = 4
        Print "x ="; x; ","; "y ="; y
    End Scope
End Scope
Print "x ="; x; ","; "y ="; y

10. 变量类型

有符号整数,就是有正负数

有符号整数 8位 16位 32位 64位 32/64自适应
VB6 Integer Long
VFB Byte Short Long LongInt Integer

无符号整数,就是只有正数,没有负数,可表示的数值上限比有符号多一倍

无符号整数 8位 16位 32位 64位 32/64自适应
VB6 Byte
VFB UByte UShort ULong ULongInt UInteger

浮点数

浮点数 32位单精度 64位双精度 货币类型 超大浮点数
VB6 Single Double Currency
VFB Single Double BigFloat

字符串类型(8位是ANSI 编码,16位是Unicode 编码)
内存结构 :8位 1个英文占1个字节,1个中文占2个字节, 16位不管英文中文,1个字都占2个字节。

字符串 8位变长 8位定长 16位变长 16位定长
VB6 String String * n
VFB String zString * n StringW WString * n

11. 函数返回

VB6支持返回数组,VFB不支持

Function 函数名() As Long
   'VB6 -----------
   函数名 = 1
   If xxx Then 函数名 = 2 : Exit Function
   'VFB -----------
   函数名   = 1
   Function = 1
   If xxx Then Return 2
End Function

12. 内循环控制

   'VB6 -----------
   Do
      Exit Do
   Loop
   Do
      Do
         Exit Do
      Loop
      Exit Do
   Loop
   'VFB -----------
   Do
      Do
         Exit Do,Do   '可以直接退出双循环,或N多循环,还支持 Continue For,For | Continue While,While
      Loop
      Continue Do '直接跳转到循环头,继续循环的下一个迭代,还支持 Continue For | Continue While
   Loop

13. 函数的参数

vb6

Function 函数名(a As Long ,b As String , Optional ByVal b As Integer = 1) As Long
   'a  b  没写 ByVal或ByRef ,默认ByRef
End Function

VFB

Function 函数名(a As Long ,b As String , b As Integer = 1) As Long
   'a  b  没写 ByVal或ByRef ,数值默认ByVal ,字符或其它类型默认ByRef
End Function

14. 其它函数差异

  • ASC
    VB6 asc("111") asc(mid("111",2,1))
    VFB asc("111") asc("111",2)
  • CHR
    VB6 chr(1) & chr(2)...
    VFB chr(1,2,3.....)
  • InStr
    VB6instr("abc","a")
    VFB instr("abc","a") 单个查找是一样的
    当遇到需要查找多个文字时,不理解的看FB帮助
    VB6 instr("abc","a") instr("abc","b")
    VFB instr("abc",any "ab")
    从尾部开始查找
    VB6instr(-1,"abc","a")
    VFB InStrRev("abc","a")
  • Split
    VB6 nn()=Split("1,2,3,4",",")
    VFB 数量= vbSplit("1,2,3,4",",",nn())
  • Join
    VB6 Join(nn(),",")
    VFB YF_Join(nn(),",")
  • Replace
    VB6 nn=Replace("123","1","a")
    VFB nn=YF_Replace("123","1","a")
  • Now
    VB6 Print Now 输出是文本:如 2025-05-18 14:30:00
    VFB Print Now 输出是数字:如 45795.82042824074
    输出文本用:Format(Now, "yyyy-mm-dd hh:mm:ss")
  • 字符函数
    由于VFB有两套字符串,所用到的字符函数也有两套,下面举例几个,以此类推
    8位:Asc InStr Lcase Left Mid
    16位:AscW InStrW LcaseW LeftW MidW

评论一下?

OωO
取消