mirror of
https://github.com/QB64Official/qb64.git
synced 2024-09-28 11:17:47 +00:00
72 lines
3.1 KiB
Markdown
72 lines
3.1 KiB
Markdown
The [_OFFSET](_OFFSET) variable type stores the location of a value in memory. The byte size varies as required by the system.
|
|
|
|
## Syntax
|
|
|
|
> [DIM](DIM) variable [AS](AS) **[_OFFSET](_OFFSET)**
|
|
|
|
## Description
|
|
|
|
* [_OFFSET](_OFFSET) types can be created as signed or [_UNSIGNED](_UNSIGNED) at the programmer's discretion.
|
|
* The type suffix for [_OFFSET](_OFFSET) is **%&** which designates the integer value's flexible size.
|
|
* Offset values are only useful when used in conjunction with [_MEM](_MEM) or [DECLARE LIBRARY](DECLARE-LIBRARY) procedures.
|
|
* OFFSET values are used as a part of the [_MEM](_MEM) variable [Variable Types](Variable-Types) in QB64. Variable.OFFSET returns or sets the current position in memory.
|
|
* API [DECLARE LIBRARY](DECLARE-LIBRARY) parameter or [TYPE](TYPE) names may include **lp, ptr** or **p** which designates them as a pointer type.
|
|
* **Warning: [_OFFSET](_OFFSET) values cannot be cast to other variable type values reliably.**
|
|
* **Warning: Variable length [STRING](STRING) values can move about in memory at any time.** If you get the [_OFFSET](_OFFSET) of a variable length sting on one code line and use it on the next it may not be there anymore.** To be safe, move variable length strings into fixed length strings first.**
|
|
|
|
## Example(s)
|
|
|
|
The SHBrowseForFolder function receives information about the folder selected by the user in Windows XP and 7.
|
|
|
|
```vb
|
|
|
|
DECLARE CUSTOMTYPE LIBRARY
|
|
FUNCTION FindWindow& (BYVAL ClassName AS _OFFSET, WindowName$)
|
|
END DECLARE
|
|
|
|
_TITLE "Super Window"
|
|
hwnd& = FindWindow(0, "Super Window" + CHR$(0))
|
|
|
|
TYPE BROWSEINFO 'typedef struct _browseinfo '[Microsoft MSDN](http://msdn.microsoft.com/en-us/library/bb773205%28v=vs.85%29.aspx)
|
|
hwndOwner AS LONG ' ' HWND
|
|
pidlRoot AS _OFFSET ' ' PCIDLIST_ABSOLUTE
|
|
pszDisplayName AS _OFFSET ' ' LPTSTR
|
|
lpszTitle AS _OFFSET ' ' LPCTSTR
|
|
ulFlags AS _UNSIGNED LONG ' UINT
|
|
lpfn AS _OFFSET ' ' BFFCALLBACK
|
|
lParam AS _OFFSET ' ' LPARAM
|
|
iImage AS LONG ' ' int
|
|
END TYPE 'BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
|
|
|
|
DECLARE DYNAMIC LIBRARY "shell32"
|
|
FUNCTION SHBrowseForFolder%& (x AS BROWSEINFO) '[Microsoft MSDN](http://msdn.microsoft.com/en-us/library/bb762115%28v=vs.85%29.aspx)
|
|
SUB SHGetPathFromIDList (BYVAL lpItem AS _OFFSET, BYVAL szDir AS _OFFSET) '[Microsoft MSDN](http://msdn.microsoft.com/en-us/library/bb762194%28VS.85%29.aspx)
|
|
END DECLARE
|
|
|
|
DIM b AS BROWSEINFO
|
|
b.hwndOwner = hwnd
|
|
DIM s AS STRING * 1024
|
|
b.pszDisplayName = _OFFSET(s$)
|
|
a$ = "Choose a folder!!!" + CHR$(0)
|
|
b.lpszTitle = _OFFSET(a$)
|
|
DIM o AS _OFFSET
|
|
o = SHBrowseForFolder(b)
|
|
IF o THEN
|
|
PRINT LEFT$(s$, INSTR(s$, CHR$(0)) - 1)
|
|
DIM s2 AS STRING * 1024
|
|
SHGetPathFromIDList o, _OFFSET(s2$)
|
|
PRINT LEFT$(s2$, INSTR(s2$, CHR$(0)) - 1)
|
|
ELSE
|
|
PRINT "Cancel?"
|
|
END IF
|
|
|
|
```
|
|
|
|
## See Also
|
|
|
|
* [_WINDOWHANDLE](_WINDOWHANDLE)
|
|
* [Using _OFFSET](Using--OFFSET)
|
|
* [_OFFSET (function)](_OFFSET-(function)), [_MEM](_MEM)
|
|
* [DECLARE LIBRARY](DECLARE-LIBRARY)
|
|
* [DECLARE DYNAMIC LIBRARY](DECLARE-DYNAMIC-LIBRARY)
|
|
* [Variable Types](Variable-Types)
|