[quote user="Bruce Reeves SRNS"]I'm attempting to utilize a std::vector<DPoint3d> as a parameter to mdlLinear_extract()[/quote]
Excellent! More info about the Standard Library and MDL.
[quote user="Bruce Reeves SRNS"]shapePts.reserve(maxVerts);
mdlLinear_extract( (DPoint3d*)&shapePts, &maxVerts, elHandle.GetElementP(), elHandle.GetModelRef() );[/quote]
The key word here is reserve. vector.reserve() and its constructor version only tell the vector how many members to expect. It grabs enough memory to eliminate subsequent reallocation. However, the memory in that vector is meaningless until it's initialised, and the vector doesn't know how many members it contains. To specify the number of members, you also need to vector.resize(). Function resize() tells the vector how many members it really has, which is less than how many members it could have.
If you're lucky, each member is initialised to its default value (which in this case assumes that DPoint3d has a constructor, which it doesn't). In this case, you want an empty array because you're going to fill that memory with data.
A vector is guaranteed to expose its internal array as a contiguous sequence, so it looks just like a similar C-style array. However, you have to invoke the right magic...
shapePts.resize (maxVerts); mdlLinear_extract (&shapePts [0], ...);
The address of the first member is a DPoint3d*, which is what you want. Why isn't (DPoint3d*)&shapePts what you want? Because &shapePts is the address of an object, and depending how that object is laid out by the compiler, that may not be the address of its first member. Since you've handcuffed and blindfolded the compiler with your C-style cast, the compiler can't tell you the problem: a std::vector<DPoint3d>* is not a DPoint3d*.
C++ Recommended Reading
For more on this, read Effective STL, by Scott Meyers. While you're on Amazon, buy the rest of his C++ books at the same time. When you've read those, move on to Exceptional C++, by Herb Sutter, and his other books. Buy a new bookshelf while you're at it.