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

 채택된 답변

Titus Edelhofer
Titus Edelhofer 2011년 8월 15일
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

@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

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

James Tursa
James Tursa 2011년 8월 15일

0 개 추천

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

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

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Fortran with MATLAB에 대해 자세히 알아보기

질문:

2011년 8월 15일

Community Treasure Hunt

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

Start Hunting!

Translated by