Page 1 of 1

Returning pointers to LCS

Posted: Tue May 15, 2018 2:32 pm
by trevordevore
I was wrapping the Windows API call GetActiveWindow() today and wanted to return the value to LCS. GetActiveWindow() returns a HWND which is a pointer. I couldn't find a way to return the integer value (the windowId property of a stack) by working with a Pointer. I then found IntPtr which works for my purposes. Can someone from headquarters confirm that this is the correct approach?

Code: Select all

foreign handler User32GetActiveWindow() returns optional IntPtr binds to "user32>GetActiveWindow"

public handler GetActiveWindow() returns Integer
    variable hWnd as optional Integer

    unsafe
      put User32GetActiveWindow() into hWnd
    end unsafe

    if hWnd is not nothing then
      return hWnd
    else
      return 0
    end if
  end handler

Re: Returning pointers to LCS

Posted: Thu May 17, 2018 3:49 pm
by LCMark
@trevordevore: Yes - HWND is better typed as UIntPtr - it isn't really a pointer, but a handle which is checked by the OS in all API calls (so you can't break things by adding 1 to an existing one and passing that back - you'll just get an API error).

Re: Returning pointers to LCS

Posted: Sun May 20, 2018 2:30 pm
by PaulDaMacMan
It would be nice if there was a chart for all the different types defined in the different LCB modules (Built-in, Java, ObjC, Emscripten JS). :idea: