The pointers to MSXDataRec are probably being deallocated at the end of the call to the MSX DLL, since there's no point to keep it around. It's not a threading issue. You're not supposed to be holding onto pointers, since they're not guaranteed to still be there in a different call.
You'd be better off saving the actual data you were passed instead of a reference to it. Then you could access that data as much as you like.
Equis International, Inc.
A Thomson Reuters Company
90 S. 400 W Suite 620
SLC, UT 84101