# Globals

The Globals structure contains various functions to operate on handles, functions to obtain handles to the Poly/ML application and window and a function to get error information.

    structure Globals :
      sig
        type 'a HANDLE
        type HINSTANCE
        type HWND
        val hNull : 'a HANDLE
        val handleOfInt : int -> 'a HANDLE
        val intOfHandle : 'a HANDLE -> int
        val isHNull : 'a HANDLE -> bool

        val ApplicationInstance : unit -> HINSTANCE
        val GetLastError : unit -> OS.syserror
        val MainWindow : unit -> HWND
      end

`type 'a HANDLE
hNull : 'a HANDLE
handleOfInt(i): 'a HANDLE
intOfHandle(h): int
isHNull(h): bool`
ML Extension: All handles, such as HWND and HBITMAP, are instances of the 'a HANDLE type. Generally the Windows functions which can take NULL as a valid argument or return NULL as a valid result take option types. Occasionally it may be necessary to pass NULL in other circumstances in which case hNull can be used in ML. There are also a few occasions where a handle has to be cast to or from int. handleOfInt and intOfHandle can be used for this.

`ApplicationInstance(): HINSTANCE`
ML Extension: Returns the application instance handle passed in to the WinMain function when Poly/ML was started.

`MainWindow(): HWND`
ML Extension: Returns the handle to the Poly/ML window.

`GetLastError(): OS.syserror`
Returns the error code for the last function call. Generally when a function fails an exception is raised including the last error as part of the exception packet.