petermat1
Dec 8, 2016
=ABCs of APIs 11 - <span style="background-color: #ffffff;"> Translating documentation for DLLs in MS "C" into Liberty BASIC </span>= //Petermat// [[toc|flat]] ---- =Introduction= I am afraid this note is not by your friendly expert <span style="background-color: #ffffff;">Alyce Watson, but by ignoramus Petermat. Why? Because Alyce did not write this, I needed it, and all I can do is to try to find my way. If I fail maybe someone will be encouraged to pick up and correct the note.</span> <span style="background-color: #ffffff;">Why is the note necessary? Because Microsoft documents it's API's using C / C++ examples</span> <span style="font-size: 1.4em;">**The example I am going to use.**</span> The following LB code is due to"MKnarr" on http://libertybasic.conforums.com/index.cgi?board=api&num=1175176417&action=display&start=15 If you run this it will open a window showing a folder tree headed by "My computor". If you select a folder then this will be returned in sPath$<span style="background-color: #ffffff;">Alyce Watson at </span>http://libertybasicuniversity.com/lbnews/nl109/browse.htm. [[code]] <spanstyle="font-size: 1.1em;">BIF.RETURNONLYFSDIRS = 1 MAX.PATH = 260 STRUCT BrowseInfo,_ hWndOwner As uLong,_ pIDLRoot As Long,_ pszDisplayName As Long,_ lpszTitle$ As ptr,_ ulFlags As Long,_ lpfnCallback As Long,_ lParam As Long,_ iImage As Long 'Set the owner window, optional BrowseInfo.hWndOwner.struct = 0 BrowseInfo.lpszTitle$.struct = text$ 'Return only if the user selected a directory BrowseInfo.ulFlags.struct = BIF.RETURNONLYFSDIRS 'Show the 'Browse for folder dialog calldll #shell32, "SHBrowseForFolder",_ BrowseInfo as struct,_ lpIDList as long If lpIDList>0 Then sPath$ = space$(MAX.PATH) + chr$(0) 'Get the path from the IDList calldll #shell32, "SHGetPathFromIDList",lpIDList as long,sPath$ as ptr,r as long openstyle="color: darkblue;">open "ole32" for dll as #ole'Free'free the block of memory calldll #ole, "CoTaskMemFree",_lpIDListlpIDList as long,_rr as long close #oleiNull = InStr(sPath$, chr$(0)) If iNull Then sPath$ = Left$(sPath$, iNull - 1) End If print sPath$</span> [[code]]=Third Part Title= Text here. [[code format="lb"]] 'code hereThe MS definition at https://msdn.microsoft.com/en-us/library/windows/desktop/bb762194(v=vs.85).aspx [[code]] <span style="font-family: Consolas,Courier,monospace; font-size: 14px;">BOOL SHGetPathFromIDList( _In_ PCIDLIST_ABSOLUTE pidl, _Out_ LPTSTR pszPath ); </span> [[code]]---- [[toc|flat]]This is C++ code. SHGetPathFromIDList is the name of a function - just like LB - and the comma delimited items inside the () are the two function parameters. A C++ function returns a value just like an LB function