Создание COM-объектов

Создание серверного процесса - обзор

MATLAB обеспечивает две функции, чтобы создать COM-объект:

  • actxcontrol Создает управление Microsoft® ActiveX® в окне фигуры MATLAB.

  • actxserver Создает внутрипроцессорный сервер для компонента динамически подключаемой библиотеки (DLL) или сервер из процесса для исполняемого файла (EXE) компонент.

Следующая схема показывает основные шаги в создании серверного процесса. Для получения дополнительной информации о том, как программное обеспечение MATLAB устанавливает интерфейсы к результирующему COM-объекту, см. интерфейсы COM-объектов.

Создание элемента управления ActiveX

Можно создать экземпляр элемента управления ActiveX от клиента MATLAB, использующего или пользовательский интерфейс (actxcontrolselect) или функцию actxcontrol из командной строки. Любой из этих методов создает экземпляр управления в клиентском процессе MATLAB и возвращает указатель на первичный интерфейс к COM-объекту. Через этот интерфейс можно получить доступ к публичным свойствам или методам объекта. Можно также установить больше интерфейсов к объекту, включая интерфейсы то использование IDispatch.

В этом разделе описывается создать экземпляр управления и как расположить его в окно фигуры MATLAB.

Листинг установленных средств управления

Функция actxcontrollist показывает вам, какие средства управления COM в настоящее время установлены в вашей системе. Ввод:

list = actxcontrollist

MATLAB отображает массив ячеек, перечисляющий каждое управление, включая его имя, программный идентификатор (ProgID) и имя файла.

Этот пример показывает информацию для нескольких средств управления (ваши результаты могут отличаться):

list = actxcontrollist;
s = sprintf(' Name = %s\n ProgID = %s\n File = %s\n', list{114:115,:})

Отображения MATLAB:

s =

 Name = OleInstall Class
 ProgID = Outlook Express Mime Editor
 File = OlePrn.OleInstall.1
 Name = OutlookExpress.MimeEdit.1
 ProgID = C:\WINNT\System32\oleprn.dll
 File = C:\WINNT\System32\inetcomm.dll

Нахождение конкретного управления

Если вы знаете имя управления, можно отобразить его ProgID и путь папки, содержащей его. Например, некоторые примеры в этой документации используют управление Mwsamp2. Можно найти его со следующим кодом:

list = actxcontrollist;
for ii = 1:length(list)
   if ~isempty(strfind([list{ii,:}],'Mwsamp2')) 
      s = sprintf(' Name = %s\n ProgID = %s\n File = %s\n', ...
             list{ii,:})
   end
end
s =

   Name = Mwsamp2 Control
   ProgID = MWSAMP.MwsampCtrl.2
   File =
   D:\Apps\MATLAB\R2006a\toolbox\matlab\winfun\win32\mwsamp2.ocx

Местоположение этого файла зависит от вашей установки MATLAB.

Создание объектов управления Используя пользовательский интерфейс

Используя actxcontrolselect функция является самым простым способом создать экземпляр объекта управления. Эта функция отображает все средства управления, установленные в вашей системе. Когда вы выбираете элемент из списка и нажимаете кнопку Create, MATLAB создает управление и возвращает указатель на него. Ввод:

h = actxcontrolselect

MATLAB отображает диалоговое окно Select an ActiveX Control. Интерфейс имеет панель выбора ActiveX Control List слева и панель Preview справа. Чтобы видеть предварительный просмотр управления, кликните по одним из имен элементов управления в панели выбора. (Пустая панель предварительного просмотра означает, что управление не имеет предварительного просмотра.), Если MATLAB не может создать экземпляр, сообщение об ошибке появляется в панели предварительного просмотра.

Setting Properties с actxcontrolselect.  Чтобы изменить значения свойств при создании управления, нажмите кнопку Properties в панели Preview. Можно выбрать, какое окно рисунка вставить управление (Родительское поле), где расположить его в окно (Поля X и Y), и что размер сделать управление (Ширина и Высота).

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

Можно выбрать стандартные программы коллбэка путем нажатия на имя в конечном счете столбец, и затем нажатия кнопки Browse. Чтобы присвоить стандартную программу коллбэка больше чем одному событию, сначала нажмите клавишу Ctrl и кликните по именам одиночных соревнований. Также перетащите мышь по последовательным именам события, и затем нажмите Browse, чтобы выбрать стандартную программу коллбэка.

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

Например, в панели ActiveX Control List, выберите Calendar Control 10.0 (версия в вашей системе может отличаться), и нажмите Properties. MATLAB отображает диалоговое окно Choose ActiveX Control Creation Parameter. Чтобы изменить размер по умолчанию для управления, введите Ширину 500 и Высоту 350. Чтобы создать экземпляр Календарного управления, нажмите OK в этом окне и нажмите Create в следующем окне.

Можно также установить параметры управления с помощью функции actxcontrol. Один параметр, который можно установить с actxcontrol, но не с actxcontrolselect, является именем файла инициализации. Когда вы задаете это имя файла, MATLAB устанавливает начальное состояние управления к тому из ранее сохраненного управления.

Информация Возвращена actxcontrolselect.  Функция actxcontrolselect создает объект, который является экземпляром COM-класса MATLAB. Функция возвращает до двух аргументов: указатель для объекта, h и 1-by-3 массив ячеек, info, содержа информацию об управлении. Чтобы получить эту информацию, введите:

[h, info] = actxcontrolselect

Массив ячеек info показывает имя, ProgID и имя файла для управления.

Если вы выбираете Calendar Control, и затем нажимаете Create, информацию об отображениях MATLAB как:

h =
   COM.mscal.calendar.7
info = 
    [1x20 char]    'MSCAL.Calendar.7'    [1x41 char]

Чтобы расширить массив ячеек info, введите:

info{:}

Отображения MATLAB:

ans =
   Calendar Control 9.0
ans =
   MSCAL.Calendar.7
ans =
   D:\Applications\MSOffice\Office\MSCAL.OCX

Создание объектов управления из командной строки

Если вы уже знаете, какое управление вы хотите, и вы знаете его ProgID, используете функцию actxcontrol, чтобы создать экземпляр управления.

ProgID является единственным необходимым входом к этой функции. Кроме того, можно выбрать, какое окно рисунка вставить управление, где расположить его в окно, и что размер сделать его. Можно также указать события, вы хотите, чтобы управление ответило на или установило начальное состояние управления путем чтения того состояния из файла. Смотрите страницу с описанием actxcontrol для полного объяснения ее входных параметров.

Функция actxcontrol возвращает указатель на первичный интерфейс к объекту. Используйте этот указатель, чтобы сослаться на объект в других вызовах функции COM. Можно также использовать указатель, чтобы получить больше интерфейсов к объекту. Для получения дополнительной информации об использовании интерфейсов см. интерфейсы COM-объектов.

Меняя местоположение управления в Окне фигуры

После создания управления можно изменить его форму и положение в окне с функцией move.

Наблюдайте то, что происходит с объектом, созданным в последнем разделе, когда вы задаете новые координаты источника (70, 120) и новые размерности ширины и высоты 400 и 350:

move(h,[70 120 400 350]);

Ограничения к поддержке ActiveX

Контейнер элемента управления ActiveX COM MATLAB не делает оперативный, активируют средства управления, пока они не видимы.

Создание сервера COM

Инстанцирование компонента DLL

Чтобы создать сервер для компонента, реализованного как динамически подключаемая библиотека (DLL), используйте функцию actxserver. MATLAB создает экземпляр компонента в том же процессе, который содержит клиентское приложение.

Синтаксисом для actxserver, когда используется с компонентом DLL, является actxserver(ProgID), где ProgID является программным идентификатором для компонента.

actxserver возвращает указатель на первичный интерфейс к объекту. Используйте этот указатель, чтобы сослаться на объект в других вызовах функции COM. Можно также использовать указатель, чтобы получить больше интерфейсов к объекту. Для получения дополнительной информации об использовании интерфейсов см. интерфейсы COM-объектов.

В отличие от средств управления Microsoft ActiveX, любой пользовательский интерфейс, отображенный сервером, появляется в отдельном окне.

Вы не можете использовать 32-битный незавершенный COM-объект DLL в 64-битном приложении MATLAB. Для получения информации об этом ограничении см. https://www.mathworks.com/matlabcentral/answers/95116-why-am-i-not-able-to-use-32-bit-dll-com-objects-in-64-bit-matlab.

Инстанцирование компонента EXE

Можно использовать функцию actxserver, чтобы создать сервер для компонента, реализованного как исполняемый файл (EXE). В этом случае MATLAB инстанцирует компонента в сервере из процесса.

Синтаксисом для actxserver, чтобы создать исполняемый файл является actxserver(ProgID, sysname). ProgID является программным идентификатором для компонента, и sysname является дополнительным аргументом, используемым в конфигурировании распределенного COM (DCOM) система.

actxserver возвращает указатель на первичный интерфейс к COM-объекту. Используйте этот указатель, чтобы сослаться на объект в других вызовах функции COM. Можно также использовать указатель, чтобы получить больше интерфейсов к объекту. Для получения дополнительной информации об использовании интерфейсов см. интерфейсы COM-объектов.

Любой пользовательский интерфейс, отображенный сервером, появляется в отдельном окне.

Этот пример создает серверное приложение COM, запускающее программу электронной таблицы Microsoft Excel®. Указатель присвоен h.

h = actxserver('Excel.Application')

Отображения MATLAB:

h =
    COM.excel.application

MATLAB может программно соединиться с экземпляром приложения Сервера автоматизации COM, которое уже работает на вашем компьютере. Чтобы получить ссылку на такое приложение, используйте функцию actxGetRunningServer.

Этот пример получает ссылку на программу Excel, которая должна уже работать на вашей системе. Возвращенный указатель присвоен h.

h = actxGetRunningServer('Excel.Application')

Отображения MATLAB:

h =
    COM.excel.application

Смотрите также

| |