This appendix is designed to explain how multidimensional arrays are stored and accessed, with specific relevance to marshaling arrays between COM clients and IDL.

Please note that if you use the Convert Majority property in the Export Bridge Assistant on exported property or method parameters (described in Converting Array Majority), you do not have to worry about the information or examples in this appendix. For more information, see Property Information.

A linear, one-dimensional (1D) vector is a contiguous list of items in memory. There is no room for misinterpreting what order the items are stored and accessed. However, moving beyond 1D can introduce contradictory definitions and connotations, depending on the source consulted and the programming language in question.

This Help will avoid using words of strong and conflicting meaning, such as “column majority” and “row majority.” (You can read Columns, Rows, and Array Majority for more information on those terms.) What matters more than vocabulary is how multidimensional arrays are stored in physical memory (linear memory) and how they are accessed. For brevity’s sake, we will use two-dimensional arrays (2D) to illustrate storage, and focus on Visual Basic, C++, Win32 APIs, and IDL pro code for how the arrays are accessed.

Note: Java has the same issues as COM with multidimensional array storage and access. You can assume that this appendix addresses both external languages, although it names only COM.