1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-26 09:45:54 +00:00
QB64-PE/internal/help/_OFFSET.txt
SMcNeill 6e01fc8dce Altered string compare routines (<,<=,>,>=) so they don't give false results with CHR$(0).
Added new _STRCMP and _STRICMP commands for quick string comparisons.
Cleaned up QB64 to finish removing the QUI (quick user insert) code and folders.
Altered UCASE and LCASE routines to be faster in some situations for us.
2014-09-22 08:19:03 -04:00

71 lines
3.6 KiB
Plaintext

The '''_OFFSET''' variable type stores the location of a value in memory. The byte size varies as required by the system.
{{PageSyntax}}
::: [[DIM]] variable [[AS]] '''_OFFSET'''
''Usage:''
* _OFFSET types can be created as signed or [[_UNSIGNED]] at the programmer's discretion.
* The type suffix for _OFFSET is '''%&amp;''' which designates the integer value's flexible size.
* Offset values are currently only useful when used in conjunction with [[_MEM]] or [[DECLARE LIBRARY]] procedures.
* OFFSET values are used as a part of the [[_MEM]] variable [[type]] in QB64. Variable.OFFSET returns or sets the current position in memory.
* API [[DECLARE LIBRARY|LIBRARY]] parameter or [[TYPE|type]] names may include '''lp, ptr''' or '''p''' which designates them as a pointer type.
* '''Warning: _OFFSET values cannot be cast to other variable type values reliably!'''
* '''Warning: Variable length [[STRING]] values can move about in memory AT ANY TIME!''' If you get the _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:'' The SHBrowseForFolder function receives information about the folder selected by the user in Windows XP and 7.
{{CodeStart}} '' ''
{{Cl|DECLARE DYNAMIC LIBRARY|DECLARE CUSTOMTYPE LIBRARY}}
{{Cl|FUNCTION}} FindWindow&amp; ({{Cl|BYVAL}} ClassName AS {{Cl|_OFFSET}}, WindowName$)
{{Cl|END}} {{Cl|DECLARE LIBRARY|DECLARE}}
{{Cl|_TITLE}} &quot;Super Window&quot;
hwnd&amp; = FindWindow(0, &quot;Super Window&quot; + {{Cl|CHR$}}(0))
{{Cl|TYPE}} BROWSEINFO 'typedef struct _browseinfo '[http://msdn.microsoft.com/en-us/library/bb773205%28v=vs.85%29.aspx Microsoft MSDN]
hwndOwner {{Cl|AS}} {{Cl|LONG}} ' ' HWND
pidlRoot {{Cl|AS}} {{Cl|_OFFSET}} ' ' PCIDLIST_ABSOLUTE
pszDisplayName {{Cl|AS}} {{Cl|_OFFSET}} ' ' LPTSTR
lpszTitle {{Cl|AS}} {{Cl|_OFFSET}} ' ' LPCTSTR
ulFlags {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|LONG}} ' UINT
lpfn {{Cl|AS}} {{Cl|_OFFSET}} ' ' BFFCALLBACK
lParam {{Cl|AS}} {{Cl|_OFFSET}} ' ' LPARAM
iImage {{Cl|AS}} {{Cl|LONG}} ' ' int
{{Cl|END}} {{Cl|TYPE}} 'BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
{{Cl|DECLARE LIBRARY|DECLARE DYNAMIC LIBRARY}} &quot;shell32&quot;
{{Cl|FUNCTION}} SHBrowseForFolder%&amp; (x {{Cl|AS}} BROWSEINFO) '[http://msdn.microsoft.com/en-us/library/bb762115%28v=vs.85%29.aspx Microsoft MSDN]
{{Cl|SUB}} SHGetPathFromIDList ({{Cl|BYVAL}} lpItem {{Cl|AS}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} szDir {{Cl|AS}} {{Cl|_OFFSET}}) '[http://msdn.microsoft.com/en-us/library/bb762194%28VS.85%29.aspx Microsoft MSDN]
{{Cl|DECLARE LIBRARY|END DECLARE}}
{{Cl|DIM}} b {{Cl|AS}} BROWSEINFO
b.hwndOwner = hwnd
{{Cl|DIM}} s {{Cl|AS}} {{Cl|STRING}} * 1024
b.pszDisplayName = {{Cl|_OFFSET (function)|_OFFSET}}(s$)
a$ = &quot;Choose a folder!!!&quot; + {{Cl|CHR$}}(0)
b.lpszTitle = {{Cl|_OFFSET (function)|_OFFSET}}(a$)
{{Cl|DIM}} o {{Cl|AS}} {{Cl|_OFFSET}}
o = SHBrowseForFolder(b)
{{Cl|IF...THEN|IF}} o {{Cl|THEN}}
{{Cl|PRINT}} {{Cl|LEFT$}}(s$, {{Cl|INSTR}}(s$, {{Cl|CHR$}}(0)) - 1)
{{Cl|DIM}} s2 {{Cl|AS}} {{Cl|STRING}} * 1024
SHGetPathFromIDList o, {{Cl|_OFFSET (function)|_OFFSET}}(s2$)
{{Cl|PRINT}} {{Cl|LEFT$}}(s2$, {{Cl|INSTR}}(s2$, {{Cl|CHR$}}(0)) - 1)
{{Cl|ELSE}}
{{Cl|PRINT}} &quot;Cancel?&quot;
{{Cl|END IF}} '' ''
{{CodeEnd}}
{{small|Code by Galleon}}
''See also:''
* [[_OFFSET (function)]]
* [[DECLARE LIBRARY]]
* [[DECLARE DYNAMIC LIBRARY]]
* [[Using _OFFSET]]
* [[Variable Types]]
{{PageNavigation}}