exponenta event banner

Блокировать выполнение приложений, создающих рисунки

MCRWaitForFigures

Продукт MATLAB ® Compiler SDK™ добавляет MCRWaitForFigures для каждого класса в создаваемых COM-компонентах. MCRWaitForFigures не принимает аргументы. Ваше приложение может звонить MCRWaitForFigures в любое время во время выполнения.

Цель MCRWaitForFigures является блокированием выполнения вызывающей программы до тех пор, пока отображаются фигуры, созданные в инкапсулированном коде MATLAB. Как правило, используется MCRWaitForFigures когда:

  • Открыт один или несколько рисунков, созданных экземпляром COM-объекта, созданного компилятором.

  • Метод, отображающий графику, требует ввода данных пользователем перед продолжением.

  • Метод, вызывающий фигуры, был вызван из main() в консольной программе.

Когда MCRWaitForFigures вызывается, выполнение вызывающей программы блокируется, если какие-либо фигуры, созданные вызывающим объектом, остаются открытыми.

Внимание

Будьте осторожны при вызове MCRWaitForFigures способ. Вызов этого метода из пользовательского интерфейса Microsoft ® Visual Basic ® или из интерактивной программы, например Microsoft Excel ®, может повешить приложение. Этот метод следует вызывать только из консольных программ.

Использование MCRWaitForFigures для блокирования выполнения

Следующий пример иллюстрирует использование MCRWaitForFigures из консольного приложения Microsoft Visual C++ ®. В примере используется COM-объект, созданный компилятором; объект инкапсулирует код MATLAB, который рисует простой график.

  1. Создайте рабочую папку для исходного кода. В этом примере папка D:\work\plotdemo.

  2. Создайте следующий файл MATLAB в этой папке:

    drawplot.m
    
    function drawplot()
        plot(1:10);
  3. Используйте компилятор для создания COM-компонента со следующими свойствами:

    Имя компонентаplotdemo
    Имя классаplotdemoclass
    Версия1.0

    Примечание

    Вместо использования приложения Library Compiler создать компонент можно путем ввода следующей команды в подсказке MATLAB:

    mcc -d 'D:\work\plotdemo\src' -v -B    'ccom:plotdemo,plotdemoclass,1.0' 
       'D:\Work\plotdemo\drawplot.m'
    
  4. Создание программы Visual C++ в файле с именем runplot.cpp со следующим кодом:

    #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;
    }
  5. В окне команд MATLAB создайте приложение следующим образом:

    mbuild runplot.cpp

    При запуске приложения в окне рисунка MATLAB отображается график от 1 до 10. Приложение заканчивается, когда вы отклоняете цифру.

    Примечание

    Чтобы увидеть, что происходит без вызова MCRWaitForFigures. прокомментировать вызов, перестроить приложение и запустить его. В этом случае рисунок рисуется и сразу же уничтожается по мере выхода приложения.