The MATLAB®
Compiler SDK™ product adds a MCRWaitForFigures
method
to each class in the COM components that it creates. MCRWaitForFigures
takes
no arguments. Your application can call MCRWaitForFigures
any
time during execution.
The purpose of MCRWaitForFigures
is to block
execution of a calling program as long as figures created in encapsulated MATLAB code
are displayed. Typically you use MCRWaitForFigures
when:
There are one or more figures open that were created by an instance of a COM object created by the compiler.
The method that displays the graphics requires user input before continuing.
The method that calls the figures was called from main()
in
a console program.
When MCRWaitForFigures
is called, execution
of the calling program is blocked if any figures created by the calling
object remain open.
Caution
Be careful when calling the MCRWaitForFigures
method.
Calling this method from a Microsoft®
Visual Basic® UI or from an
interactive program such as Microsoft
Excel® can hang the application.
This method should be called only from console-based
programs.
The following example illustrates using MCRWaitForFigures
from
a Microsoft
Visual C++® console application. The example uses
a COM object created by the compiler; the object encapsulates MATLAB code
that draws a simple plot.
Create a work folder for your source code. In this example,
the folder is D:\work\plotdemo
.
Create the following MATLAB file in this folder:
drawplot.m function drawplot() plot(1:10);
Use the compiler to create a COM component with the following properties:
Component name | plotdemo |
Class name | plotdemoclass |
Version | 1.0 |
Note
Instead of using the Library Compiler app, you can create the component by issuing the following command at the MATLAB prompt:
mcc -d 'D:\work\plotdemo\src' -v -B 'ccom:plotdemo,plotdemoclass,1.0' 'D:\Work\plotdemo\drawplot.m'
Create a Visual C++ program in a file named runplot.cpp
with
the following code:
#include "src\plotdemo_idl.h" #include "src\plotdemo_idl_i.c" int main() { // Initialize the COM library HRESULT hr = CoInitialize(NULL); // Create an instance of the COM object you created Iplotdemoclass* pIplotdemoclass = NULL; hr = CoCreateInstance(CLSID_plotdemoclass, NULL, CLSCTX_INPROC_SERVER, IID_Iplotdemoclass, (void **)&pIplotdemoclass); // Call the drawplot method hr = pIplotdemoclass->drawplot(); // Block execution until user dismisses the figure window hr = pIplotdemoclass->MCRWaitForFigures(); // Uninitialize COM CoUninitialize(); return 0; }
In the MATLAB Command Window, build the application as follows:
mbuild runplot.cpp
When you run the application, the program displays a plot from 1 to 10 in a MATLAB figure window. The application ends when you dismiss the figure.
Note
To see what happens without the call to MCRWaitForFigures
.
comment out the call, rebuild the application, and run it. In this
case, the figure is drawn and is immediately destroyed as the application
exits.