Интеграция Магический квадрат с COM-приложением

Обзор

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

Примечание

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

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

Чтобы начать, создайте файл MATLAB mymagic.m содержащий следующий код:

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

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

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

  2. Выберите Generic COM Component в качестве типа приложения.

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

    mymagic.m расположен в MagicDemoComp папка.

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

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

Примечание

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

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

  2. В диалоговом окне New Project выберите Installed> Templates> Other Languages> Visual Basic> Windows Form Application как тип проекта и нажмите Open. Это создает новый проект Visual Basic с пустой формой.

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

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

  5. Вернувшись в главное меню Visual Basic, выберите Project > Add Component..., чтобы открыть диалоговое окно Add New Item.

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

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

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

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. Снова откройте проект, выбрав File > Save Project в главном меню. Примите имя по умолчанию для основной формы и введите magic.vbp для имени проекта.

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

Проверка приложения

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

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

Для просмотра документации необходимо авторизоваться на сайте