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

Обзор

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

Примечание

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

Создание файла 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, чтобы открыть диалоговое окно 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. Магический квадрат входного размера появляется.

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