Libraries: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
m (Protected "Libraries" ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)))
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
<center>'''DLL, C++ and the Windows API Libraries'''</center>
<center>'''DLL, C++ and the Windows API Libraries'''</center>
* Working with QB64 Declarations: [[C Libraries]], [[DLL Libraries]], [[Windows Libraries]]
* Working with QB64 Declarations: [[C Libraries]], [[DLL Libraries]], [[Windows Libraries]]
* QB64 Library Keywords: [[DECLARE LIBRARY]], [[DECLARE DYNAMIC LIBRARY]], [[ALIAS]], [[BYVAL]]
* QB64 Library Keywords: [[DECLARE LIBRARY]], [[ALIAS]], [[BYVAL]]
* [[PEEK]] and [[POKE]] Library: [[PEEK and POKE Library]]
* [[PEEK]] and [[POKE]] Library: [[PEEK and POKE Library]]
* COM and LPT ''Inpout32.dll'' [[OUT]]: [[Port Access Libraries]]
* COM and LPT ''Inpout32.dll'' [[OUT]]: [[Port Access Libraries]]
* Setting Windows environment values and changing them in the Registry: [[Windows Environment]]
* Setting Windows environment values and changing them in the Registry: [[Windows Environment]]
* SFML sound library: [[SFML Library]]
* SFML sound library: [[SFML Library]]
* Windows program [[Windows_Libraries#Focus|FOCUS]] and [[Windows_Libraries#Hot_Keys_.28maximize.29|HOTKEYS]] that do not require focus of the program.
* Windows program [[Windows Libraries#Focus|FOCUS]] and [[Windows Libraries#Hot_Keys_(maximize)|HOTKEYS]] that do not require focus of the program.
* Windows Registry Library: [[Windows_Registry_Access|Windows Registry Library]]
* Windows Registry Library: [[Windows Registry Access|Windows Registry Library]]
* Windows or Linux SQL Database Library: [[SQL Client]]
* Windows or Linux SQL Database Library: [[SQL Client]]


Line 21: Line 21:


* QB64 also allows [[TYPE]] declarations to be placed inside of [[SUB]] or [[FUNCTION]] procedures!
* QB64 also allows [[TYPE]] declarations to be placed inside of [[SUB]] or [[FUNCTION]] procedures!
* In QB64-PE v3.12.0 and up, [[$INCLUDEONCE]] can be used to prevent that the include file's contents is injected multiple times into a program.




Line 26: Line 28:




==C++ Variable Types==
== C++ Variable Types ==
The following C++ variable types should be used when converting sub-procedure parameters from Libraries to QB64 variable types.
The following C++ variable types should be used when converting sub-procedure parameters from Libraries to QB64 variable types.
{{WhiteStart}}                            '''QB64 Library Conversion Types'''
{{FixedStart}}                            '''QB64 Library Conversion Types'''


'''C Name        Description                Size*    Signed      Range*        Unsigned'''
'''C Name        Description                Size*    Signed      Range*        Unsigned'''
Line 35: Line 37:
[[LONG|int]]        Integer(Dword)                4 byte  -2147483648 to 2147483647  0 to 4294967295
[[LONG|int]]        Integer(Dword)                4 byte  -2147483648 to 2147483647  0 to 4294967295
[[LONG|long int]]    Int32, Long integer or Long  4 byte  -2147483648 to 2147483647  0 to 4294967295
[[LONG|long int]]    Int32, Long integer or Long  4 byte  -2147483648 to 2147483647  0 to 4294967295
[[_INTEGER64|long long]]  Long long (Qword)            8 byte  -9223372036854775808 to 9223372036854775807                  
[[_INTEGER64|long long]]  Long long (Qword)            8 byte  -9223372036854775808 to 9223372036854775807
[[Boolean|bool]]        Boolean value true or false.  1 byte  true or false
[[Boolean|bool]]        Boolean value true or false.  1 byte  true or false
[[SINGLE|float]]      Floating point number        4 byte  +/- 3.4E +/- 38 (~7 digits)
[[SINGLE|float]]      Floating point number        4 byte  +/- 3.4E +/- 38 (~7 digits)
Line 42: Line 44:
[[Unicode|wchar_t]]    Wide character([[Unicode]])   2 or 4  1 wide character
[[Unicode|wchar_t]]    Wide character([[Unicode]])   2 or 4  1 wide character
[[_OFFSET|PVOID]]      void pointer(void *)          ANY    Pointer or offset
[[_OFFSET|PVOID]]      void pointer(void *)          ANY    Pointer or offset
{{WhiteEnd}}
{{FixedEnd}}


'''*''' 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.
'''*''' 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.
{{WhiteStart}}
{{FixedStart}}
'''                            Windows API Data Structures'''
'''                            Windows API Data Structures'''


Line 58: Line 60:
QWORD            8 bytes                      64                      [[_INTEGER64]]
QWORD            8 bytes                      64                      [[_INTEGER64]]
Ptr or LP        Short or Long Pointer name  ANY                      [[_OFFSET]]
Ptr or LP        Short or Long Pointer name  ANY                      [[_OFFSET]]
{{WhiteEnd}}
{{FixedEnd}}
 


{{PageNavigation}}
{{PageReferences}}

Latest revision as of 13:19, 19 November 2024

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!


  • SUB and FUNCTION code should be $INCLUDEd at the very bottom of the QB64 BAS code module in a BM text file.
  • QB64 also allows TYPE declarations to be placed inside of SUB or FUNCTION procedures!
  • In QB64-PE v3.12.0 and up, $INCLUDEONCE can be used to prevent that the include file's contents is injected multiple times into a program.


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
char        Character or small integer.   1 byte   -128 to 127                0 to 255
short int   Short Integer(Word)           2 byte   -32768 to 32767            0 to 65535
int         Integer(Dword)                4 byte   -2147483648 to 2147483647  0 to 4294967295
long int    Int32, Long integer or Long   4 byte   -2147483648 to 2147483647  0 to 4294967295
long long   Long long (Qword)             8 byte   -9223372036854775808 to 9223372036854775807
bool        Boolean value true or false.  1 byte   true or false
float       Floating point number         4 byte   +/- 3.4E +/- 38 (~7 digits)
double	    Double precision floating.    8 byte   1.7976E+308 (~15 digits)
long double Long double precision float  10 byte   1.1897E+4932 (~22 digits)
wchar_t     Wide character(Unicode) 	  2 or 4   1 wide character
PVOID       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


QB64 Programming References

Wiki Pages
Main Page with Articles and Tutorials
QB64 specific keywords (alphabetical)
Original QBasic keywords (alphabetical)
QB64 OpenGL keywords (alphabetical)
Keywords by Usage
Got a question about something?
Frequently Asked Questions about QB64
QB64 Phoenix Edition Community Forum
Links to other QBasic Sites:
Pete's QBasic Forum
Pete's QBasic Downloads