How Data Types are Marshaled

Simply put, the Microsoft VM evaluates Java arguments, then converts them to native C++ types. The Microsoft VM infers the native type of each parameter and the return value from the declared (compile-time) Java type of the parameter. For example, a parameter declared as a Java integer is passed as a 32-bit integer; a parameter declared as a Java String object is passed as a null-terminated string, and so forth. There are no invisible attributes that provide information about the native types. In Java, what you see is what you get.

The following topics describe in detail how the Java data types map to native data types:

  • Quick Reference   Provides tables that list the Java type that maps to each native type.

  • Basic Scalar Types   Describes the mappings for int, byte, short, long, float, and double.

  • Chars   Explains the mapping of the char data type.

  • Booleans   Explains the mapping of the boolean data type.

  • Strings   Explains how to pass and receive strings.

  • Arrays   Explains how to pass arrays of scalars.

  • Structures   Explains how to use the @dll.struct directive to pass and receive structures and how to use @dll.structmap to embed fixed-sized arrays within structures.

  • Pointers   Explains how to handle DLLs that have multiple return values and how to read and write data through raw pointers.

  • Polymorphic Parameters   Explains how to simulate polymorphic parameters.

  • Callbacks   Explains how to declare and invoke a DLL function that takes a Callback parameter and how to embed a Callback inside a structure.