Click here to Skip to main content
15,867,686 members
Articles / Programming Languages / Visual Basic
Article

Building COM Components Using MATLAB - Part I

Rate me:
Please Sign up or sign in to vote.
3.28/5 (15 votes)
27 Feb 20046 min read 273.8K   2K   46   68
Building COM components that can be called from any IDEs that support COM with MATLAB COMBuilder toolbox

What is MATLAB COM builder?

The MATLAB COM Builder is an extension to the MATLAB Compiler that enables customers to automatically convert MATLAB applications to Component Object Model (COM) objects. Developers can do modeling and analysis in MATLAB and convert the models to ready-to-use COM objects. These objects can be immediately integrated with any COM-based application.

Building steps

To create a simple COM component in MATLAB, you must pass four steps:

  • Creating a project
  • Managing m-files and MEX-files
  • Building project
  • Packaging and distributing the component

A project consists of all the elements necessary to build an application using the MATLAB COM Builder. COM Builder components are COM  objects accessible through Visual Basic, Visual C++, Delphi, Power Builder or any other language that supports COM. Each COM object exposes one or more classes. Each class contains a set of functions called methods, corresponding to the original MATLAB functions included in the component’s project.

When creating a component, you must additionally provide one or more class names. The component name represents the name of the DLL file to be created. A class name denotes the name of the class that performs a call on a specific method at run-time. The relationship between component name and class name, and which methods (MATLAB functions) go into a particular class, are purely organizational. As a general rule, when compiling many MATLAB functions, it helps to determine a scheme of function categories and to create a separate class for each category. The name of each class should be descriptive of what the class does.

Creating a project

When creating a new project, enter the MATLAB comtool command. In this case the MATLAB COM Builder GUI will appear. The following figure shows the GUI.

Image 1

To change project settings, select Settings from Project menu. Figure 2 shows the project settings dialog:

Project Settings

The component name is name of the DLL file that is built by the build process. The component name must differ from any m-file or mex-file added later to the project. One can add more classes to the project when entering the class name and pressing "Add >>" button.

Note: If your component requires any graphics routine (such as the plot function), you must select Use Handle Graphics Library from Compiler Options.

Managing m-files and MEX-files

After creating the project, it is time to add m-files and mex-files related to the project. You can do this through "Add File" button. Editing or removing a file is very simple. Just select the file and press the "Edit" or "Remove" button! Every object that is added to the project is displayed in project tree.

Building Project

By collecting all of the necessary information, we can build the project. For this reason, select "COM Object" from the Build menu or simply click on the "Build" button in the right pane. The build status pane will show the status of build process. If any error occurs during the build process, the status pane will show it.

Packaging and Distributing the Component

Once you have successfully compiled your models and tested the COM object, you are ready to package the component for distribution to your end users. Choose Component, Package Component to create a self-extracting executable containing these files:

FilePurpose
_install.bat Script run by the self-extracting executable
<ComponentName_ProjectVersion>.dll Compiled component
mglinstaller.exe MATLAB math and graphics installer
mwcomutil.dllCOM Builder utility library
mwregsvr.exeExecutable that registers DLLs on target machines

The self-extracting executable is named <componentname>.exe. Running the installer on a target machine performs these steps:

  • mglinstaller installs the MATLAB C/C++ Math and Graphics libraries.
  • mwregsvr registers mwcomutil.dll and <ComponentName_ProjectVersion>.dll.

You must repeat this distribution process on each target machine.

Building MATLAB Component

By building a component using the MATLAB COM Builder, a developer can use it from any language or environment that benefit from COM features such as Visual Basic, Visual C++, Access, Excel and so on. The process of integrating components built by MATLAB is easy, but in general you must address seven items in any code written to use the MATLAB COM Builder components:

  1. Adding Class Methods and Properties to COM Builder Objects
  2. Adding Events to COM Builder Objects
  3. Creating an Instance of a Class
  4. Calling the Methods of a Class Instance
  5. Processing varargin and varargout Arguments
  6. Handling Errors During a Method Call
  7. Modifying Flags

Adding Class Methods and Properties to COM Builder Objects

Class properties allow an object to retain an internal state between method calls. MATLAB COM Builder automatically converts all global variables shared by the M-files that make up a class to properties on that class. By using a global keyword when declaring a variable, the variable is seen as global in the workspace. MATLAB m-files act as the class methods. Each m-file in this situation, define a class method.

Here is an example: A common use of Fourier transforms is to find the frequency components of a signal buried in a noisy time domain signal. Consider data sampled at 1000 Hz. Form a signal containing 50 Hz and 120 Hz and corrupt it with some zero-mean random noise. It is difficult to identify the frequency components by looking at the original signal. Converting to the frequency domain, the discrete Fourier transform of the noisy signal (y) is found by taking the 512-point fast Fourier transform (FFT).

We can develop two m-files, one for adding some noise to original signal and the other for computing power spectrum (a measurement of power at various frequencies). These two m-files are as below:

AddNoise.m

function [n]=AddNoise()
global x;       %Original Signal
global y;       %Noisy Signal

if (isempty(x))
n = [];
return;
end

y = x + 2*randn(size(x));       %add some noise

subplot(211)
plot(y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')

n=y;

And PowerSpectrum.m

function [m]=PowerSpectrum()
global x;       %Original Signal
global y;       %Noisy Signal

if (isempty(y))
m = [];
return;
end

f = 1000*(0:256)/512;
Y = fft(y,512);
Pyy = Y.* conj(Y) / 512;
subplot(212)
plot(f,Pyy(1:257))
title('Frequency content of y')
xlabel('frequency (Hz)')
m=Pyy;

The first one adds some noise and the second, computes power spectrum of the noisy signal, both of the m-files plot their results. As you see we declare two global variables: x, y. Both of them are considered as properties of Fourier class. We can see them in Visual Basic later. Add both of them to MATLAB COM Builder project (Figure 3):

Image 3

Now, build the component and open an IDE such as Visual Basic. To see what occured, open a new project and select "References" from Project menu. The following dialog will be displayed, select "Fourier 1.0 Type Library" from list. As you see, the location of the component is where we built the component with comtool. Figure 4 shows the References of the project:

References of project

OK. Click on your VB form add the following code:

VBScript
Private Sub Form_Load()
Dim myVar As New Fourier.Fourier
Dim x(1 To 601) As Double
Dim t(1 To 601) As Double

m = 1
For i = 0 To 0.6 Step 0.001
    t(m) = i
    x(m) = Sin(2 * pi * 50 * t(m)) + Sin(2 * pi * 120 * t(m))
    m = m + 1
Next

myVar.x = x
Call myVar.addnoise(0, 0)
Call myVar.powerspectrum(0, 0)
End Sub

The magic is here. When you are typing, VB shows methods and properties of your component (See figure 5):

Image 5

You have simply created a COM component from MATLAB!

Press F5 to see results. Figure 6 shows it.

Image 6

Enjoy!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
CEO Solaris Electronics LLC
United Arab Emirates United Arab Emirates
I was born in Shiraz, a very beautiful famous city in Iran. I started programming when I was 12 years old with GWBASIC. Since now, I worked with various programming languages from Basic, Foxpro, C/C++, Visual Basic, Pascal to MATLAB and now Visual C++.
I graduated from Iran University of Science & Technology in Communication Eng., and now work as a system programmer for a telecommunication industry.
I wrote several programs and drivers for Synthesizers, Power Amplifiers, GPIB, GPS devices, Radio cards, Data Acquisition cards and so many related devices.
I'm author of several books like Learning C (primary and advanced), Learning Visual Basic, API application for VB, Teach Yourself Object Oriented Programming (OOP) and etc.
I'm winner of January, May, August 2003 and April 2005 best article of month competition, my articles are:


You can see list of my articles, by clicking here


Comments and Discussions

 
GeneralRe: Code doesn't work.... Pin
Punit Ganshani15-Sep-04 7:16
Punit Ganshani15-Sep-04 7:16 
GeneralRe: Code doesn't work.... Pin
TAN TH4-Nov-05 17:17
TAN TH4-Nov-05 17:17 
GeneralSolutions:Re: Code doesn't work.... Pin
TAN TH6-Nov-05 14:15
TAN TH6-Nov-05 14:15 
GeneralCan't build my project Pin
Elgitaro2-Jun-04 16:30
Elgitaro2-Jun-04 16:30 
GeneralRe: Can't build my project Pin
Abbas_Riazi2-Jun-04 22:03
professionalAbbas_Riazi2-Jun-04 22:03 
GeneralRe: Can't build my project Pin
Elgitaro2-Jun-04 22:38
Elgitaro2-Jun-04 22:38 
GeneralRe: Can't build my project Pin
ned_oz30-Apr-05 1:20
ned_oz30-Apr-05 1:20 
Questioncan i use it with MFC Pin
dnqhung18-May-04 17:30
dnqhung18-May-04 17:30 
AnswerRe: can i use it with MFC Pin
Abbas_Riazi18-May-04 18:07
professionalAbbas_Riazi18-May-04 18:07 
GeneralRe: can i use it with MFC Pin
dnqhung18-May-04 21:43
dnqhung18-May-04 21:43 
Questioncan you give an example in VC++ Pin
dnqhung17-May-04 20:25
dnqhung17-May-04 20:25 
GeneralProblems Running Application Pin
fesi14-Apr-04 22:10
fesi14-Apr-04 22:10 
GeneralBuilding Standalone application Pin
Chivalrous8-Apr-04 0:48
Chivalrous8-Apr-04 0:48 
GeneralRe: Building Standalone application Pin
Abbas_Riazi8-Apr-04 5:01
professionalAbbas_Riazi8-Apr-04 5:01 
GeneralSTRAIGHT OUT OF MATLAB'S MANUAL !! Pin
mr_computer_head200025-Mar-04 14:35
mr_computer_head200025-Mar-04 14:35 
Questionhow to use it in c++ project? Pin
cowen5-Mar-04 15:34
cowen5-Mar-04 15:34 
AnswerRe: how to use it in c++ project? Pin
Abbas_Riazi8-Mar-04 18:58
professionalAbbas_Riazi8-Mar-04 18:58 
Questionwhy bother to reinvent the wheel? Pin
Anonymous29-Feb-04 3:40
Anonymous29-Feb-04 3:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.