In both OpenGL and D3D matrices, the basis vectors go into the columns of the matrix. However, OpenGL expects matrices in column-major order, while D3D expects them in row-major order (and, as far as I know, most programmers' matrix classes are usually in row-major order). Thus, row-major matrices must be transposed to send them to OpenGL.
This is not correct. D3D uses row-vectors, which basically means that a 4d vector is a 1 (row) x 4 (colums) matrix. In order to transform a 1x4 vector V with a 4x4 matrix M, you need to do V*M. Also, a transformation of M1 followed by a transformation of M2 yields the matrix M1 * M2. Base vectors in the matrix are ~~columns~~ rows
OpenGL uses colum-vectors, e.g. a vector is a 4x1 matrix. Tranformation is done by doing M * V, and accumulated transformations are done with M2 * M1. Base vectors in the matrix are ~~rows~~ columns.
Therefore, a d3d matrix is transposed with respect to an OpenGL matrix in the mathematical sense. BUT, since d3d stores it's matrices row-major, while OpenGL stores it column-major, both types of matrices have the same memory layout (the reason for OpenGL using a column-major order is that the basevectors are therefore stored sequentially in memory)
.edit: nasty typo's fixed