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.
To change project settings, select Settings from Project menu. Figure 2 shows the project settings dialog:
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:
File | Purpose |
_install.bat | Script run by the self-extracting executable |
.dll
| Compiled component |
mglinstaller.exe | MATLAB math and graphics installer |
mwcomutil.dll | COM Builder utility library |
mwregsvr.exe | Executable that registers DLLs on target machines |
The self-extracting executable is named
.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 .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:
- Adding Class Methods and Properties to COM Builder Objects
- Adding Events to COM Builder Objects
- Creating an Instance of a Class
- Calling the Methods of a Class Instance
- Processing
varargin
andvarargout
Arguments - Handling Errors During a Method Call
- 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):
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:
OK. Click on your VB form add the following code:
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):
You have simply created a COM component from MATLAB!
Press F5 to see results. Figure 6 shows it.
Enjoy!
About A. Riazi
![]() | 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 Acqusition 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 and August (2003) best article of month competetion, my articles are: You can see list of my articles, by clicking here |