kmansari wrote: I guess declaring it the wrong way might have caused the .NET CLR to construct a screwed up call stack. Keep in mind that the term unmanaged means that the CLR does not managed the memory. When you call into unmanaged code, the CLR has no way of tracking memory. Just FYI. :) kmansari wrote: I still have the GCHandle question for you though. Am I really required to pin down memory that was allocated in the unmanaged world? No, but when alloc'ing it in the managed world and passing it to unmanaged code you do. Depending on what calls you make, though - like Marshal.PtrToStructure - you may need to pin the object because once you marshal the struct the GC tracks it and may move it. Chances are that won't happen - especially with value types which are declared on the stack - but it just something to keep in mind for future development. This posting is provided "AS IS" with no warranties, and confers no rights. Software Design Engineer Developer Division Sustained Engineering Microsoft [My Articles] [My Blog]