Philip Borghesani <firstname.lastname@example.org> wrote in message <email@example.com>... > On 5/23/2012 5:17 PM, Cody wrote: > > Hello, hopefully some of you will be able to shed some light on the > > problem. I'm trying to pass a user defined pointer type between calls to > > different mex functions in a Matlab script. More specifically, I have > > some custom hardware that is accessed over USB using an API written in > > C. In order to access the hardware, a pointer (of a user defined type) > > to a device handle is generated in C like this: > > > > usb_device_handle=open_usb_device(); > > > > I can then use this device handle to read 'Nbytes' amount of data from > > the USB device (again in C): > > > > usb_device_data=read_data_from_usb_device(usb_device_handle, Nbyts); > > > > I'd like to pass this device handle back to Matlab as an opaque type > > (with respect to Matlab) and then from Matlab pass the device handle to > > another mex function which performs other operations using the device. > > The problem is that Matlab only allows one to pass back types of > > MxArray. I've read about people using mxMalloc() and mexLock() to do > > these types of things... but I was wondering if there was a clean > > solution that I haven't considered. Again, the data type is completely > > opaque to Matlab, and I only intend to manipulate the pointer value in > > the C-code defined in the mex files. > > You may be able to access the library directly with loadlibrary which > can deal with opaque pointers. If your library has functions or > interfaces that cannot be handled by loadlibrary you can create a helper > library to handle interface issues and use loadlibrary on that. A > helper library can do anything that a mex file can do and more.
Thanks for the suggestions! I was able to pass the pointer created in the mex functions by a lower-level C library back to the Matlab environment in an appropriately sized mxArray and then back into a different mex function as suggested. I was also able to declare a persistent memory location in the mex-file C-code so that sucessive invocations of the same mex function could access the pointer.