Uses Java Native Access (JNA) to call C++ functions from Java, and perform conversions between
Java classes and native types
In order for JNA to call the correct MSALRuntime API, the names and number of parameters in this
interface's methods must match those found in MSALRuntime's header files
As for data types, JNA should be able to convert any basic Java type (int, long, String, etc.),
and it offers a number of classes to mimic native types that have no clear Java equivalent
(LongByReference for long*, Pointer for void*, etc.)