Accessing handle graphics from within Fortran mexfunction

Can you access Matlab's handle graphics from within a Fortran mexFunction? I see that there are mexSet and mexGet functions; however, they appear to apply only for C mexFunctions.
Thanks a million, Bill

 Risposta accettata

Hi Otis,
I guess (!) the answer is yes. Handles itself are just usual doubles. Therefore you should be able to call the set and get by something like
mxArray* pprhs[3];
pprhs[0] = prhs[0]; // assuming prhs[0] is the handle
pprhs[1] = mxCreateString("tag");
pprhs[2] = mxCreateString("Bill");
mexCallMATLAB(0, plhs, 3, pprhs, "set");
Titus

5 Commenti

@Titus: I assume you want:
"pprhs[0] = mxDuplicateArray(prhs[0])" and "mexCallMATLAB(0, NULL, 3, pprhs, "set");"
But this is still C, while Otis asks for Fortran.
@Otis: You are right - the documentation tells, that mexSet and mexGet are available for C only. This is surprising, because I do not see a reason to forbid this from Fortran. However, Titus' mexCallMATLAB is a working solution, although it is much slower than mexSet.
@Titus ... Thanks!!!!!!!!!!!!!!!!!!
I tried your approach with the following simple test and it worked!!
subroutine mexFunction(nlhs, plhs, nrhs, prhs)
implicit none
integer*4 :: nlhs, nrhs, nnlhs, nnrhs
integer*4 :: plhs(nlhs), prhs(nrhs)
integer*4 :: mxCreateString
integer*4, dimension(3) :: pplhs, pprhs
if (nrhs .ne. 1) then
call mexErrMsgTxt('One input argument required.')
else if(nlhs .ne. 0) then
call mexErrMsgTxt('No output arguments required.')
end if
nnlhs = 0
pplhs(1) = 0
pplhs(2) = 0
pplhs(3) = 0
nnrhs = 3
pprhs(1) = prhs(1)
pprhs(2) = mxCreateString("String")
pprhs(3) = mxCreateString("Rush Rocks!!")
call mexCallMATLAB(nnlhs, pplhs, nnrhs, pprhs, "set")
return
end
Thanks again,
Bill
Hi Bill,
your welcome. And sorry for mixing up Fortran and C, fortunately you and Jan noticed ;-).
Titus
@Titus: Please fix the prhs->pprhs confusion in your code. The line "prhs[0] = mxDuplicateArray(prhs[0])" will blow-up the memory manager...
Hi Jan,
thanks for the reminder, done ...
Titus

Accedi per commentare.

Più risposte (1)

You can get Fortran versions of mexGet and mexSet in my Fortran 95 interface package, which can be found here:
They work the same as their C counterparts. You can also find a lot of other useful functions & utilities in this package, many of which are not available in the C API.

1 Commento

@James ... Cool!! I will definitely check it out. Thanks!!
Bill

Accedi per commentare.

Categorie

Community Treasure Hunt

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

Start Hunting!

Translated by