exponenta event banner

Интеграция Magic Square в COM-приложение

Обзор

В этом примере используется простой файл MATLAB ®, который принимает один вход и создает магический квадрат такого размера. Затем он строит COM-компонент, используя этот файл MATLAB в качестве метода класса. Наконец, в примере показана интеграция этого компонента в автономное приложение Microsoft ® Visual Basic ®. Приложение принимает размер магического квадрата в качестве входных данных и отображает матрицу в поле управления ListView.

Примечание

ListView - это элемент управления формы Windows ®, отображающий список элементов со значками. Для создания пользовательского интерфейса, подобного правой панели Проводника Windows, можно использовать представление списка. Дополнительные сведения о элементах управления формы Windows см. в библиотеке MSDN.

Создание файла MATLAB

Для начала создайте файл MATLAB mymagic.m содержащий следующий код:

function y = mymagic(x); 
y = magic(x);

Использование приложения компилятора библиотеки для создания и построения проекта

  1. Находясь в MATLAB, откройте приложение компилятора библиотеки.

  2. Выберите тип приложения Generic COM Component.

  3. Добавить mymagic.m в список экспортируемых функций.

    mymagic.m находится в MagicDemoComp папка.

  4. Нажмите кнопку Пакет.

Создание проекта Microsoft Visual Basic

Примечание

В этой процедуре предполагается, что используется Microsoft Visual Basic 6.0.

  1. Запустите Visual Basic.

  2. В диалоговом окне «Новый проект» выберите в качестве типа проекта «Установленные» > «Шаблоны» > «Другие языки» > «Visual Basic» > «Windows Form Application» и нажмите кнопку «Открыть». При этом создается новый проект Visual Basic с пустой формой.

  3. В главном меню выберите «Проект» > «Ссылки», чтобы открыть диалоговое окно «Ссылки проекта».

  4. Выберите magicdemo 1.0 Type Library из списка доступных компонентов и нажмите кнопку ОК.

  5. Возвращаясь к главному меню Visual Basic, выберите «Проект» > «Добавить компонент»... для открытия диалогового окна «Добавить новый элемент».

Создание интерфейса пользователя

После создания проекта добавьте в пустую форму ряд элементов управления для создания формы со следующими параметрами.

Тип элемента управленияИмя элемента управленияСвойстваЦель

Frame

Frame1

Подпись = Magic Squares Demo

Групповые элементы управления

Label

Label1

Подпись = Magic Square Size

Помечает поле редактирования магического квадрата.

TextBox

edtSize

 

Принимает ввод размера магического квадрата.

CommandButton

btnCreate

Подпись = Create

При нажатии создается новый магический квадрат с текущим размером.

ListView

lstMagic

GridLines = True

LabelEdit = lvwManual

Вид = lvwReport

Отображает магический квадрат.

По завершении заполнения формы и элементов управления добавьте в форму следующий код. Этот код ссылается на перечисленные выше имена элементов управления и переменных. Если для любого элемента управления или переменной заданы разные имена, измените этот код, чтобы отразить эти различия.

Public Class magicvb
    Private sizeMatrix As Double 'Holds current matrix size
    Private theMagic As magicdemo.magicdemoclass 'magic object instance 

    Private Sub magicvb_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'This function is called when the form is loaded.
        'Creates a new magic class instance.
        On Error GoTo Handle_Error
        theMagic = New magicdemo.magicdemoclass
        sizeMatrix = 0
        Exit Sub
Handle_Error:
        MsgBox(Err.Description)
    End Sub


    Private Sub ShowMatrix(matrixMagic As Object)
        'This function populates the ListView with the contents of 
        'y. y is assumed to contain a 2D array.
        Dim szSquare As Long
        Dim indxRow As Long
        Dim indxCol As Long
        Dim nLen As Long
        On Error GoTo Handle_Error
        'Get array size
        If IsArray(matrixMagic) Then
            szSquare = UBound(matrixMagic, 1)
        Else
            szSquare = 1
        End If
        lstMagic.Clear()
        lstMagic.Columns.Add("")
        For cIndx = 1 To szSquare
            lstMagic.Columns.Add(CStr(cIndx))
        Next
        lstMagic.View = View.Details
        For indxRow = 1 To szSquare
            Dim item As New ListViewItem(CStr(indxRow))
            For indxCol = 1 To szSquare
                item.SubItems.Add(Format(matrixMagic(indxRow, indxCol)))
            Next
            lstMagic.Items.Add(item)
        Next


        Exit Sub

Handle_Error:
        MsgBox(Err.Description)
    End Sub


    Private Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
        'This function is called when the Create button is pressed.
        'Calls the mymagic method, and displays the magic square.
        Dim matrixMagic As Object
        If sizeMatrix <= 0 Or theMagic Is Nothing Then Exit Sub
        On Error GoTo Handle_Error
        Call theMagic.mymagic(1, matrixMagic, sizeMatrix)
        Call ShowMatrix(matrixMagic)
        Exit Sub
Handle_Error:
        MsgBox(Err.Description)
    End Sub

    Private Sub edtSize_TextChanged(sender As Object, e As EventArgs) Handles edtSize.TextChanged
        'This function is called when ever the contents of the
        'Text box change. Sets the current value of Size.
        On Error Resume Next
        sizeMatrix = CDbl(edtSize.Text)
        If Err.Number > 0 Then
            sizeMatrix = 0
        End If
    End Sub

End Class

Создание исполняемого файла в Microsoft Visual Basic

После завершения кода создайте автономный исполняемый файл magic.exe:

  1. Откройте проект повторно, выбрав в главном меню «Файл» > «Сохранить проект». Примите имя главной формы по умолчанию и введите magic.vbp для имени проекта.

  2. Вернитесь в меню Файл. Выберите Файл > Make magic.exe для создания готового продукта.

Тестирование приложения

Вы можете запустить magic.exe исполняемый, как и любая другая программа. Когда откроется главное диалоговое окно, введите положительное число в поле ввода и нажмите кнопку «Создать». Появляется магический квадрат входного размера.

ListView элемент управления автоматически осуществляет прокрутку, если магический квадрат больше 4 на 4.