这里说的是 代码 不同,其它不同,比方界面,一看就知道,无需说明。
不同点很多本人想到什么再添加说明
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
VB6asc("111") asc(mid("111",2,1))
VFBasc("111") asc("111",2) - CHR
VB6chr(1) & chr(2)...
VFBchr(1,2,3.....) - InStr
VB6instr("abc","a")
VFBinstr("abc","a")单个查找是一样的
当遇到需要查找多个文字时,不理解的看FB帮助
VB6instr("abc","a") instr("abc","b")
VFBinstr("abc",any "ab")
从尾部开始查找
VB6instr(-1,"abc","a")
VFBInStrRev("abc","a") - Split
VB6nn()=Split("1,2,3,4",",")
VFB数量= vbSplit("1,2,3,4",",",nn()) - Join
VB6Join(nn(),",")
VFBYF_Join(nn(),",") - Replace
VB6nn=Replace("123","1","a")
VFBnn=YF_Replace("123","1","a") - Now
VB6Print Now输出是文本:如 2025-05-18 14:30:00
VFBPrint Now输出是数字:如 45795.82042824074
输出文本用:Format(Now, "yyyy-mm-dd hh:mm:ss") - 字符函数
由于VFB有两套字符串,所用到的字符函数也有两套,下面举例几个,以此类推
8位:Asc InStr Lcase Left Mid
16位:AscW InStrW LcaseW LeftW MidW
评论一下?