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

 Akzeptierte Antwort

Titus Edelhofer
Titus Edelhofer am 15 Aug. 2011
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 Kommentare

Jan
Jan am 15 Aug. 2011
@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
Jan
Jan am 15 Aug. 2011
@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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

James Tursa
James Tursa am 15 Aug. 2011

0 Stimmen

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 Kommentar

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Fortran with MATLAB finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by