Add your own alternative version
Stats
922.4K views 8.6K downloads 92 bookmarked
Posted
27 May 2003

Comments and Discussions



Your code is correct. As I said maybe the MATLAB interface changed a bit. You know that by using engOpen() you want to use MATLAB COM interface (Automation) to load the MATLAB IDE.
The code that I provide was for MATLAB 6.5 and you want to load MATLAB 7.
Best regards,
A. Riazi





Hello,
I had a BC++ application that invoked the matlab engine using engOpen. It worked perfectly with R13 version of Matlab. With R14, even though I included the new libs, I get the following strange behavior. It still opens the Matlab engine but closes it thereafter. If I use engOpenSingleUse then I get return code of 3. I am not sure what this code means.
Did someone else face this problem with R14 and if yes! how was it resolved.
Thanks,
Pwn





Hi there,
Firstly i would like to say that is a very good article.Congratulations for that.
Now i would come to my problem.I need to call my own function finddepth(w1,w2).m where w1 and w2 are [5][3] matrices , from C.I want to send the matrices w1 and w2 from c to matlab.The function finddepth should process these values and send the result which is an integer back to the C compiler where I would like to print the results.
I have placed the finddepth.m in the work directory of the matlab but i dont have any idea if its running or not as the C rogram doesnt give me any error even if i m putting a wrong name over there.How shall i run my own file?
How to get the result back from the Matlab to the C program and how to print the result?
If possible can you show me a program module with the above application?
I shall be obliged for your help
Stefan





First to find MATLAB runs your mfile or not, you can use OutputBuffer() function to redirect any messages from MATLAB to a user defined buffer.
Second, for getting result of your mfile (in this case a matrix or scalar), use GetVariable() function. This will give you a mxArray pointer. You can use helper functions to print it.
Best regards,
A. Riazi





sir ,
i have some trouble about this, but i already add Matlab headers directory to VStudio directory.when i start to link your demo program, it show up the error message:
"LINK : fatal error LNK1104: cannot open file "libeng.lib"
my develop environment is
Visual C++ 6.0
Matlab 6.5 realese 13
Any help you can give me would be great.
Thanks.





You must also add the library folder to VStudio directory.
Best regards,
A. Riazi






There are library files for MSVC, Borland C++ Builder and WATCOM. You must add the MSVC library file to VStudio.
Best regards,
A. Riazi





How and where do we add the MSVC lib files?





Hello Mr. Riazi,
I read your article with interest.
I am using Compaq Visual Fortran6.6. I have Matlab6 installed in my computer with the operating system being Windows2000. Recently I also installed Matlab 7.1, so I have both Matlab6 and Matlab7.1. Previously I could easily execute this type of hybrid code:
program matplot
integer engOpen,engEvalString, engClose,ep
!DEC$ATTRIBUTES DLLIMPORT :: LIBENG
ep = engOpen('matlab ')
if (ep .eq. 0) then
write(6,*) 'Can''t start MATLAB engine'
stop
endif
call engEvalString(ep, 'cd c:\matplot')
call engEvalString(ep, 'plotmor');
end program matplot
I have included the lib libeng.lib in the resource area, the path being:
C:\Program Files\MATLAB71\extern\lib\win32\digital\df60\libeng.lib
Now I always get the message 'Can''t start MATLAB engine'
For libeng.lib I went back to Matlab6, but that does not work also. I am sure if I remove Matlab71 from the computer it will work again. But I do not like that. I like to keep both versions of Matlab and be able to invoke Matlab from my visual fortran routine.
Looking for a work around.
Thanks
Dilip





Dear all,
I have a problem with the MATLAB engine. I ask a MATLAB engine to evaluate a .m function. When the .m function is running I want to transfer matrix data to the MATLAB engine's workplace. This is because I receive data during certain events. The .m function can then read the new data and act
accordingly.
But unfortunately MATLAB does not work in this way. If an .m function is running, MATLAB does not put any new data in the workspace. I receive the matrix data only after the .m function has terminated.
Does anybody have a solution to this problem? I considered making an outofprocess COM server, so that I could call from inside my .m function to collect event data. This is a not so nice principle. Firstly, it is not event driven anymore. Secondly, I am writing a DLL, which calls my MATLAB engine. To write a outofprocess COM server in a DLL is a lot harder than writing it in an executable.
I hope somebody has some suggestions.
Kind regards,
Marcel Dijkstra





the weblink
http://www.mathworks.com/support/solutions/data/118CBI.html?118CBI
does help a bit.
But I want to do some simple plot in C/C++ using matlab 'plot' function.
saying changing the foo.m into test_plot.m
% test_plot.m
function y= test_plot(x)
x=1:10;
y=plot(x)
I can managed to compile and produce a test_plot.exe successfully. But upon execution of test_plot.exe in Command Prompt, it says:
ERROR: Function 'plot' requires the C/C++ Graphics Library.
EXITING.
I tried using a lower version of matlab 6.1, with Graphics Library, but it gives the same error.
I am reluctant to use Matlab 7, and compile, and create the MCR, because it is not suitable for me, and I just need to add in the plotting function into my existing C/C++ code. Dealing with MCR would make things more messy.
Or,
seem to me that another better option is to use the MATLAB Builder for COM, which I have not explored before.
any useful inputs is fully appreciated.
thanks.
Sincerely,
Thiam Huat





hi,
i tried but could not crack this problem.pls try to solve this.
i want a task to run until i press the "return" key.
for example send the data character out the com port continiously until i press "return" key.
pls mail me the way.
thk u
Ajo








As the Engine API send the commands to MATLAB workspace, you can call all of the functions (both built in functions and functions inside the toolbox).
Check your routines on how you call the function and how you get the results.
Best regards,
A. Riazi





Hi,
I am trying to call Matlab commands from Fortran by invoking the Matlab engine (engOpen, engEvalString, etc.) and compile into a standalone application. Everything works with the example fengdemo.f that Matlab provides. However, if I try to add other modules to the fortran code, they are not recognized (I guess not linked) to the main program. Compiling from Matlab using "mex f df60engmatopts.bat main.f90 modules.f90" does not help. Does anybody have any insights into how I should go about the compilation? My system: Matlab R14, CVF 6.6C, Windows xp, P4.
Thank you,
Martin





Dear all:
I use cmatlabeng class. i use vc++6.0 and matlab7.
my programming compiler ok, not error.
when i execute my programming, have an error message can't find "libeng.dll"
and c++ have some message:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
how i solve it?
thx..





I wrote this article for MATLAB 6.5. I think Mathworks changed the compiler a bit. Because of this you can't find libeng.dll.
A. Riazi





I use matlab6.1
I have error:
error C2065: 'engGetVariable' : undeclared identifier
error C2065: 'engPutVariable' : undeclared identifier
how let the demo file run??





Please take a look at the MATLAB documents.
A. Riazi





Hi, Razi:
Your demo code passed compile and link. However, when I try to run this code, it show me the following message:
The DEMO.EXE file is linked to missing export LIBENG.DLL: engPutVariable.
The version of MATLAB is 6.5. Do you know how to solve this problem?





I already sloved this problem. Thanks anyway.





Hi
Can u email the solution







General News Suggestion Question Bug Answer Joke Praise Rant Admin Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

