1 Kompilace & spuštění
| Aspekt | FreeBASIC | VB6 |
|---|---|---|
| Typ | Kompilátor → nativní .exe (bez runtime) | IDE + interpreter / P-code + VBRuntime6.dll |
| Kompilátor | fbc source.bas |
VB6 IDE nebo VBC.exe |
| Cílové platformy | Windows, Linux, DOS (32/64-bit) | Pouze Windows 32-bit |
| Entry point | Spouštění od prvního řádku modulu nebo explicitní Function Main() |
Formulář Form_Load nebo Sub Main v modulu |
| Dialekty | -lang fb (výchozí), -lang qb, -lang fblite |
Jeden dialekt |
Ve výchozím dialektu
-lang fb jsou všechny proměnné deklarovány explicitně a není podporována starší syntax GOTO / GOSUB.2 Typy proměnných
| Typ | FreeBASIC | VB6 |
|---|---|---|
| 8-bit celé číslo | Byte / UByte | Byte |
| 16-bit celé číslo | Short / UShort | Integer |
| 32-bit celé číslo | Integer / UInteger | Long |
| 64-bit celé číslo | LongInt / ULongInt | ❌ neexistuje (VB6 Max = Long) |
| 32-bit plovoucí | Single | Single |
| 64-bit plovoucí | Double | Double |
| Logický | Boolean (True/False) | Boolean (True=-1, False=0) |
| Znak | ZString * N nebo WString * N | String * N (fixed) / String |
| Variant | ❌ neexistuje | Variant (dynamický typ) |
| Datový typ datum | ❌ (použijte Double + funkce) | Date |
| Ukazatel | Ptr / Any Ptr | ❌ (pouze objektové reference) |
| Velikost ukazatele | 4 bajty (32-bit) / 8 bajtů (64-bit) | 4 bajty (vždy 32-bit) |
Pozor: VB6
Integer = 16 bitů, FB Integer = 32 bitů! Při přepisu kódu vždy zkontrolujte rozsahy.3 Deklarace proměnných
FreeBASIC
' Explicitní deklarace (povinná v -lang fb) Dim x As Integer Dim y As Double = 3.14 Dim s As String = "ahoj" ' Více najednou Dim a As Integer, b As Integer ' Konstanty Const PI As Double = 3.14159265 ' Statická (zachová hodnotu mezi voláními) Static pocitadlo As Integer ' Globální Dim Shared globalniVar As Integer
Visual Basic 6
' Option Explicit doporučeno Option Explicit Dim x As Long Dim y As Double y = 3.14 Dim s As String s = "ahoj" ' Více najednou (každá musí mít typ!) Dim a As Long, b As Long ' Konstanty Const PI As Double = 3.14159265 ' Statická Static pocitadlo As Long ' Globální (v .bas modulu) Public globalniVar As Long
FB
Dim Shared = VB6 Public (v modulu). V rámci procedury platí obojí jako lokální proměnná.4 Řetězce
| Funkce | FreeBASIC | VB6 |
|---|---|---|
| Délka | Len(s) | Len(s) |
| Vpravo | Right(s, n) | Right(s, n) |
| Vlevo | Left(s, n) | Left(s, n) |
| Střed | Mid(s, pos, n) | Mid(s, pos, n) |
| Hledání | InStr([start,] s, hledany) | InStr([start,] s, hledany) |
| Velká/malá | UCase(s) / LCase(s) | UCase(s) / LCase(s) |
| Ořez | Trim(s) / LTrim / RTrim | Stejné |
| Číslo → řetězec | Str(n) nebo CStr(n) | CStr(n) nebo Str(n) |
| Řetězec → číslo | Val(s) nebo CInt(s) | Val(s) nebo CInt(s) |
| Zřetězení | & nebo + | & (nebo + pro string+string) |
| Opakování znaku | String(n, znak) | String(n, znak) |
| Formátování | ❌ použijte Sprintf / vlastní | Format(n, "##0.00") |
| Unicode (wide) | WString nativně | String = Unicode interně |
| Pevná délka | Dim s As String * 10 | Dim s As String * 10 |
FreeBASIC – práce s řetězci
Dim s As String = "Ahoj, světe!" Print Len(s) ' 13 Print Mid(s, 1, 4) ' Ahoj Print InStr(s, "světe") ' 7 Print UCase(s) ' AHOJ, SVĚTE! ' Sprintf-styl (fb 1.x) Dim buf As String = Str(42) & " kočků" ' ZString = C-string (null-terminated) Dim cstr As ZString * 256 cstr = "C-styl"
VB6 – práce s řetězci
Dim s As String s = "Ahoj, světe!" Debug.Print Len(s) ' 13 Debug.Print Mid(s, 1, 4) ' Ahoj Debug.Print InStr(s, "světe") ' 7 Debug.Print UCase(s) ' AHOJ, SVĚTE! ' Formátování Dim buf As String buf = Format(3.14, "0.000") ' "3.140" ' VB6 nemá ZString – přímý C interop přes API
5 Podmínky If / Select
FreeBASIC
If x > 10 Then Print "velké" ElseIf x > 5 Then Print "střední" Else Print "malé" End If ' Jednořádkové (bez End If) If x = 0 Then Print "nula" ' Select Case Select Case x Case 1 Print "jedna" Case 2, 3 Print "dva nebo tři" Case 4 To 10 Print "4 až 10" Case Is > 10 Print "více než 10" Case Else Print "jinak" End Select
Visual Basic 6
If x > 10 Then Debug.Print "velké" ElseIf x > 5 Then Debug.Print "střední" Else Debug.Print "malé" End If ' Jednořádkové If x = 0 Then Debug.Print "nula" ' Select Case – identická syntaxe Select Case x Case 1 Debug.Print "jedna" Case 2, 3 Debug.Print "dva nebo tři" Case 4 To 10 Debug.Print "4 až 10" Case Is > 10 Debug.Print "více než 10" Case Else Debug.Print "jinak" End Select
Syntaxe
Select Case je prakticky identická v obou jazycích.6 Smyčky
FreeBASIC
' For...Next For i As Integer = 1 To 10 Step 2 Print i Next ' While...Wend While x > 0 x -= 1 Wend ' Do...Loop (4 varianty) Do While x > 0 x -= 1 Loop Do x -= 1 Loop Until x = 0 ' Exit / Continue For i As Integer = 1 To 100 If i = 5 Then Continue For ' FB only! If i = 10 Then Exit For Next
Visual Basic 6
' For...Next Dim i As Long For i = 1 To 10 Step 2 Debug.Print i Next i ' While...Wend While x > 0 x = x - 1 Wend ' Do...Loop Do While x > 0 x = x - 1 Loop Do x = x - 1 Loop Until x = 0 ' Exit For / Exit Do (žádné Continue!) For i = 1 To 100 ' VB6 nemá Continue – nutno použít GoTo If i = 10 Then Exit For Next i
FB přidává
Continue For / Continue Do – VB6 to nemá. V FB lze deklarovat řídící proměnnou přímo v For (For i As Integer = ...).7 Procedury & funkce
FreeBASIC
' Sub (žádná návratová hodnota) Sub Pozdrav(jmeno As String) Print "Ahoj, " & jmeno End Sub ' Function Function Secti(a As Integer, b As Integer) As Integer Return a + b ' nebo: Function = a + b End Function ' ByRef vs ByVal Sub Zvys(ByRef n As Integer) n += 1 End Sub ' Výchozí parametry Sub Log(msg As String, uroven As Integer = 1) Print uroven; ": "; msg End Sub ' Přetěžování (overload) Function Secti(a As Double, b As Double) As Double Return a + b End Function
Visual Basic 6
' Sub Sub Pozdrav(jmeno As String) MsgBox "Ahoj, " & jmeno End Sub ' Function Function Secti(a As Long, b As Long) As Long Secti = a + b ' přiřazení = Return End Function ' ByRef je výchozí v VB6! Sub Zvys(ByRef n As Long) n = n + 1 End Sub ' Optional parametry Sub Log(msg As String, Optional uroven As Long = 1) Debug.Print uroven; ": "; msg End Sub ' ❌ VB6 nepodporuje přetěžování!
| Vlastnost | FreeBASIC | VB6 |
|---|---|---|
| Výchozí předání | ByVal | ByRef ⚠️ |
| Return hodnota | Return nebo Function = ... | Pouze FunctionName = ... |
| Přetěžování | ✅ Overload | ❌ |
| Výchozí parametry | = hodnota v signatuře | Optional ... = hodnota |
| Variadic | ... (C-styl varargs) | ParamArray |
8 Pole (Arrays)
FreeBASIC
' Statické pole (od 0) Dim arr(9) As Integer ' 10 prvků: 0..9 ' Explicitní rozsah Dim b(1 To 5) As Double ' Dynamické pole Dim dyn() As Integer ReDim dyn(9) ReDim Preserve dyn(19) ' zachová data ' Vícerozměrné Dim mat(3, 3) As Integer ' Bounds Print LBound(arr); UBound(arr) ' 0 9
Visual Basic 6
' Statické pole (Option Base 0 default) Dim arr(9) As Long ' 10 prvků: 0..9 ' Explicitní rozsah Dim b(1 To 5) As Double ' Dynamické pole Dim dyn() As Long ReDim dyn(9) ReDim Preserve dyn(19) ' Vícerozměrné Dim mat(3, 3) As Long ' Bounds Debug.Print LBound(arr); UBound(arr) ' VB6 má navíc: Array(), IsArray(), Erase
Výchozí dolní mez je
0 v obou jazycích (pokud není nastaveno Option Base 1). FB podporuje záporné indexy: Dim a(-5 To 5).9 Uživatelské typy (Type / UDT)
FreeBASIC
' Základní Type Type Bod x As Double y As Double End Type Dim p As Bod p.x = 1.5 ' Type s metodami (OOP) Type Kruh polomer As Double Declare Function Obvod() As Double End Type Function Kruh.Obvod() As Double Return 2 * 3.14159 * polomer End Function ' Union (sdílená paměť) Union Hodnota i As Integer f As Single End Union
Visual Basic 6
' Type (v modulu .bas) Type Bod x As Double y As Double End Type Dim p As Bod p.x = 1.5 ' VB6 Type nemá metody ' Pro metody nutno použít Class Module ' Class Module: Kruh.cls Public polomer As Double Public Function Obvod() As Double Obvod = 2 * 3.14159 * polomer End Function ' ❌ VB6 nemá Union
10 Soubory I/O
FreeBASIC – zápis/čtení
' Textový zápis Dim f As Integer = FreeFile() Open "data.txt" For Output As #f Print #f, "Řádek 1" Close #f ' Textové čtení f = FreeFile() Open "data.txt" For Input As #f Dim radek As String While Not EOF(f) Line Input #f, radek Print radek Wend Close #f ' Binární Open "bin.dat" For Binary As #f Put #f, , x ' zápis Get #f, , x ' čtení Close #f
VB6 – zápis/čtení
' Textový zápis Dim f As Integer f = FreeFile Open "data.txt" For Output As #f Print #f, "Řádek 1" Close #f ' Textové čtení f = FreeFile Open "data.txt" For Input As #f Dim radek As String Do While Not EOF(f) Line Input #f, radek Debug.Print radek Loop Close #f ' Binární – stejná syntaxe Open "bin.dat" For Binary As #f Put #f, , x Get #f, , x Close #f
Syntaxe souborového I/O je velmi podobná. Hlavní rozdíl: v FB je
FreeFile() funkce se závorkami, ve VB6 je FreeFile bez závorek.11 Ukazatele & správa paměti
FreeBASIC
' Ukazatele (VB6 to nemá!) Dim p As Integer Ptr Dim x As Integer = 42 p = @x ' adresa proměnné Print *p ' dereference = 42 *p = 100 ' zápis přes ukazatel ' Dynamická alokace Dim buf As Integer Ptr buf = Allocate(10 * SizeOf(Integer)) ' ... použití ... DeAllocate(buf) ' Any Ptr = void* Dim vp As Any Ptr = Allocate(64) ' New / Delete (OOP) Dim obj As MojeTrida Ptr obj = New MojeTrida Delete obj
Visual Basic 6
' VB6 přímé ukazatele NEPODPORUJE ' Pouze objektové reference Dim obj As New MojeTrida ' obj je reference, nikoli ukazatel ' Přes Win API (nebezpečné) Dim addr As Long addr = VarPtr(x) ' adresa (čtení) addr = ObjPtr(obj) ' adresa objektu addr = StrPtr(s) ' adresa řetězce ' Přímá paměť jen přes API: ' RtlMoveMemory, CopyMemory apod. ' Garbage collector automatický ' (reference counting)
12 Objekty & třídy
FreeBASIC – Type s OOP
Type Zvire jmeno As String Declare Constructor(n As String) Declare Destructor() Declare Virtual Sub Zvuk() End Type Constructor Zvire(n As String) jmeno = n End Constructor Destructor Zvire() Print jmeno & " odchází" End Destructor Virtual Sub Zvire.Zvuk() Print "..." End Sub ' Dědičnost Type Pes Extends Zvire Declare Virtual Sub Zvuk() End Type Sub Pes.Zvuk() Print "Haf!" End Sub
VB6 – Class Module
' Soubor: Zvire.cls Public jmeno As String Private Sub Class_Initialize() ' konstruktor End Sub Private Sub Class_Terminate() Debug.Print jmeno & " odchází" End Sub Public Sub Zvuk() Debug.Print "..." End Sub ' ❌ VB6 nepodporuje dědičnost! ' Pouze Interface (Implements) ' Soubor: Pes.cls Implements IZvire ' interface Public Sub IZvire_Zvuk() Debug.Print "Haf!" End Sub
| OOP vlastnost | FreeBASIC | VB6 |
|---|---|---|
| Dědičnost | ✅ Extends | ❌ jen Implements |
| Konstruktor | ✅ Constructor | ⚠️ Class_Initialize (bez parametrů) |
| Destruktor | ✅ Destructor | ⚠️ Class_Terminate |
| Virtuální metody | ✅ Virtual / Abstract | ❌ |
| Přetěžování oper. | ✅ Operator | ❌ |
| Properties | ✅ Property Get/Set/Let | ✅ Property Get/Set/Let |
13 Preprocesory, moduly & include
FreeBASIC
' Preprocesor (#define, #ifdef, #include) #define MAX_BUFF 1024 #define VERZE "1.0" #ifdef __FB_WIN32__ Print "Windows" #else Print "Linux" #endif ' Include #include "modul.bi" ' hlavičkový soubor #include once "lib.bi" ' include guard ' Namespace Namespace MathLib Function Ctverec(x As Double) As Double Return x * x End Function End Namespace Print MathLib.Ctverec(5)
Visual Basic 6
' VB6 nemá preprocesor #define / #ifdef ' Pouze #Const a #If pro podmíněný kód #Const DEBUG_MODE = 1 #If DEBUG_MODE = 1 Then Debug.Print "Debug build" #End If ' Moduly = .bas soubory ' Class modules = .cls soubory ' Žádný #include – vše přidáno do projektu ' ❌ Žádné Namespace ' Moduly slouží jako namespace-like grouping
14 Konzole & základní grafika
FreeBASIC – konzole & grafika
' Výstup / vstup Print "Text" Print Using "###.##"; 3.14159 Input "Zadej číslo: ", n Color 14, 1 ' žlutá na modré Locate 5, 10 ' řádek, sloupec Cls ' Grafický režim (fbgfx) ScreenRes 800, 600, 32 Line (0, 0)-(400, 300), RGB(255, 0, 0) Circle (400, 300), 100, RGB(0, 255, 0) PSet (100, 100), RGB(255, 255, 0) Sleep ' čekej na klávesu
VB6 – formuláře & grafika
' VB6 je GUI-first – žádná konzola ' Výstup do formuláře nebo Debug okna Debug.Print "Text" ' Immediate window MsgBox "Zpráva" ' Grafika na Form/PictureBox (Form1) Form1.Line (0, 0)-(1000, 1000), RGB(255, 0, 0) Form1.Circle (2000, 2000), 500, RGB(0, 255, 0) Form1.PSet (100, 100), RGB(255, 255, 0) ' Souřadnicový systém v Twips (1440/inch) ' FB: pixely přímé
15 Chyby & ošetření výjimek
FreeBASIC
' FB: On Error (kompatibilita) On Error Goto ChybaLabel ' ... kód ... Exit Sub ChybaLabel: Print "Chyba: " & Err Resume Next ' Moderní FB: žádné try/catch ' Doporučeno: testovat návratové hodnoty ' Kontrola souboru If FileExists("soubor.txt") = 0 Then Print "Soubor neexistuje" End If
Visual Basic 6
' VB6 ošetření chyb On Error GoTo ChybaHandler On Error Resume Next ' ignoruj chyby On Error GoTo 0 ' reset ' Obslužná rutina Exit Sub ChybaHandler: Select Case Err.Number Case 53 ' File not found MsgBox "Soubor nenalezen" Case Else MsgBox Err.Description End Select Resume Next ' Vlastní chyba Err.Raise 1001, "MojeApp", "Popis"
16 Rychlá přechodová tabulka
Výstup na obrazovku
Print "text"Debug.Print / MsgBox
Print Using "##.#"; nFormat(n, "##.#")
Vstup od uživatele
Input "text", varInputBox("text")
InKey()GetAsyncKeyState (API)
Matematika
Sqr(x)Sqr(x)
Int(x) / Fix(x)Int(x) / Fix(x)
Abs(x) / Sgn(x)Abs(x) / Sgn(x)
Sin/Cos/Tan/AtnSin/Cos/Tan/Atn
Exp(x) / Log(x)Exp(x) / Log(x)
Konverze typů
CInt(x) / CLng(x)CInt(x) / CLng(x)
CDbl(x) / CSng(x)CDbl(x) / CSng(x)
CStr(x) / Str(x)CStr(x) / Str(x)
CByte(x) / CUInt(x)CByte(x) ❌ CUInt
Datum a čas
Now() → DoubleNow → Date
--(žádný DateSerial)DateSerial(y,m,d)
Timer() → DoubleTimer → Single
Systémové
Shell(cmd)Shell(cmd)
Environ("PATH")Environ("PATH")
ChDir / MkDir / KillChDir / MkDir / Kill
SizeOf(typ)Len(typ)
Operátory (rozdíly)
x += 1 / x -= 1x = x + 1 ⚠️
x Shl 2 / x Shr 2❌ (API nebo *4)
x Xor y / x And yx Xor y / x And y
Not x (bitwise)Not x (bitwise)
Dialekt QB compat
fbc -lang qb—
GoSub / ReturnGoSub / Return
DEFINT / DEFDBL❌
pokrývá QB 4.5—
Hlavní omezení při migraci VB6 → FreeBASIC
| Oblast | FB řešení | VB6 funkce |
|---|---|---|
| GUI formuláře | WinFBX / WinFBE / fbgfx / C-API | Integrovaný form designer |
| COM/ActiveX | Pouze přes deklarace DLL / IDispatch | Nativní podpora |
| ADO/DB přístup | SQLite3 přes DLL nebo ODBC | ADO, DAO, RDO nativně |
| Variant typ | Není (použij Any Ptr nebo Union) | Variant dynamický typ |
| With blok | ❌ nemá (přiřadit do lokální var) | With obj ... End With |
| Integer velikost | 32 bitů – přepsat VB6 Integer na Short! | 16 bitů |
| Výchozí ByRef | ByVal (bezpečnější) | ByRef – nutno zkontrolovat |