QB64.com

QB64 is a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS.

DLL, C++ and the Windows API Libraries

Creating your own $INCLUDE Text Libraries

To create your own libraries of your favorite Basic subs and functions, just copy the QB64 code to a text file and save it as a BI or BM file. Then all you need to do is $INCLUDE the text file name after all of the SUB and FUNCTION code in the program. Once it is compiled, the text file is no longer needed. Save it for other programs you create! No more Object or QLB files to mess with either!

Note: QB64 requires all DLL files to either be with the program or in the C:\WINDOWS\SYSTEM32 folder!

C++ Variable Types

The following C++ variable types should be used when converting sub-procedure parameters from Libraries to QB64 variable types.

QB64 Library Conversion Types

C Name Description Size Signed Range Unsigned
_BYTE Character or small integer. 1 byte -128 to 127 0 to 255
INTEGER Short Integer(Word) 2 byte -32768 to 32767 0 to 65535
LONG Integer(Dword) 4 byte -2147483648 to 2147483647 0 to 4294967295
LONG Int32, Long integer or Long 4 byte -2147483648 to 2147483647 0 to 4294967295
_INTEGER64 Long long (Qword) 8 byte -9223372036854775808 to 9223372036854775807 0 to 18,446,744,073,709,551,615
Boolean Boolean value true or false. 1 byte true or false -
SINGLE Floating point number 4 byte +/- 3.4E+/-38 (~7 digits) -
DOUBLE Double precision floating. 8 byte 1.7976E+308 (~15 digits) -
_FLOAT Long double precision float 10 byte 1.1897E+4932 (~22 digits) -
Unicode Wide character(Unicode) 2 or 4 1 wide character -
_OFFSET void pointer(void *) ANY Pointer or offset -

The values of the columns Size and Range depend on the system the program is compiled. The values shown above are those found on most 32-bit systems, but for other systems, the general specification is that int has the natural size suggested by the system architecture (one “word”) and the four integer types char, short, int and long must each be at least as large as the numerical type preceding it, with char being always one byte in size. The same applies to the floating point types float, double and long double, where each one must provide at least as much precision as the one that preceded it.

Windows API Data Structures

Name Description Bits QB64 Type
bit 8 bits in one byte 1 _BIT
nybble 2 nybbles in one byte 4 _BIT * 4
byte 1 byte (2 nybbles) 8 _BYTE
Char(FunctionA) ASCII character 8 (LEN(buffer)) _BYTE
WORD 2 bytes 16 INTEGER
CharW(FunctionW) Unicode wide character 16 (LEN(buffer) \ 2) _BYTE * 2
DWORD 4 bytes 32 LONG
QWORD 8 bytes 64 _INTEGER64
Ptr or LP Short or Long Pointer name ANY _OFFSET