Azzera filtri
Azzera filtri

Use function handle in MEX file (serialize it)

1 visualizzazione (ultimi 30 giorni)
What sorts of things can one do with a function handle in a MEX file?
What I'd like to do is extract all the relevant data from an mxArray that represents a function handle in such a way that I could create a different mxArray that will represent the same function handle.
In other words, I'd need to serialize an mxArray function handle.
I need this while building a bridge between MATLAB and another language. I would like to support classes in MATLAB. I can take apart just about any other kind of mxArray and put them back together as there exist mx* functions for these (e.g. mxGetData() for numerical arrays, etc.) So far it's only function handles I couldn't cope with.
EDIT: For this application I can always keep a dictionary of available function handles. I do not need or want to expose the underlying data (which may be a pointer, thus unsafe). But in order to keep a dictionary, I need to be able to at least compare function handles: do two mxArray refer to the same function handle?

Risposta accettata

James Tursa
James Tursa il 8 Apr 2013
Modificato: James Tursa il 8 Apr 2013
You might look into these undocumented API functions:
mxSerialize
mxDeserialize
I have never used them myself, but you can find some information here:
I have no idea how these functions would work for a function handle, which can have multiple embedded mxArray data buried within them.
How are you going to deal with classdef objects?
  2 Commenti
Szabolcs
Szabolcs il 8 Apr 2013
There's some interesting info here as well: mxFunctionHandleToSavedStruct() and mxSavedStructToFunctionHandle()
James Tursa
James Tursa il 9 Apr 2013
I checked those function out and FYI they preserve the shared-data-copy-ness of the data (for lack of a better term). E.g., if you start with something like this:
A = rand(2);
f = @(x)(A*x);
the function handle f will have a shared-data-copy of A inside of it. If you subsequently use mxFunctionHandleToSavedStruct on f, the resulting struct will have a shared-data-copy of A as well. And likewise if you subsequently go through mxSavedStructToFunctionHandle also. All of these will have shared-data-copies of the workspace variables (in this case A) used in the function handle.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Write C Functions Callable from MATLAB (MEX Files) in Help Center e File Exchange

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by