一.版本说明:VS2008,MATLAB2010b
二、安装MCRInstaller
在路径C:\Program Files\MATLAB\R2010b\toolbox\compiler\deploy\win32下
三、在MATLAB命令窗口中配置环境
1. 输入: mbuild –setup 出现以下界面,我选择的是[2]自己的编译器,不是MATLAB自带的。
2.打开下图
3.然后弹出以下对话框
名字自己命,我的叫recognition.选择Generic COM Component。点击 “OK”。MATLAB右边出现以下界面
点击“Add class”,命名自己的类,我的叫recognition。点击”Add files”添加自己的M文件,我的主程序叫Multimeter1.调用的子程序是lianxu1和vcmubanpipei。。。在下边添加的是我的模板图片,程序用到的不需要改变的图片可以放这里。没有用到图片不用添加。
然后点击第一个图标,build
等待2-3分钟,就生成完了,如下图
到此,,就会在你选择的路径下生成了一个文件夹 recognition打开它
会有distrib和src两个文件夹。我们要的DLL在distrib里面。
这就是我要的DLL。。
如果在已经装上MATLAB的电脑上调用MATLAB的M文件,这个DLL就行了。如果要脱离MATLAB环境,我们需要打包。
添加 Add MCR ,将MCR打包进来。再点击第二个打包图标。在Build图标的右边。
打包完成,我的程序打包前的DLL只有2M,打包后有175M了。。。
刚才的distrib文件夹下多了一个.BAT文件。
还有一个EXE
到这里对MATLAB的操作结束。。。。。。。
DLL注册
MATLAB生成的DLL,注册之后的DLL才能够被工程引用。
三、对VB.NET的操作
1. 添加引用
添加MWArray.dll的引用,我的MATLAB2010b里面没有,在网上下,或者找更低版本的MATLAB,如MATLAB7.0 里面有的,考到自己电脑里边,然后对它添加引用。
添加MWComUtil.dll的引用,MATLAB下边有,自己找到,添加。
添加自己刚才制作的DLL。。我的叫recognition_1_0.dll
一共添加了3个DLL,缺少一个都不行啊!!!
2 导入命名空间
3 调用DLL的程序
这是我的,第一句:对象化一个实例 dim ** as new 文件名.类名
第二、三、五、六句:设置函数的输入参数,我的参数有两个,一个是图片img一个是数字angle.
第四句:对象化输出参数
第七句:调用MATLAB的multimeter函数,参数说明:“1“
代表输出参数的个数;“result“是输出参数,img和angle是输入参数。这样我就可以得到结果了。我是对一张数字图像进行识别的程序,以下是结果。
重要说明:
1.。以上这用速度是很慢的,慢的原因是第一句,对象化实例的时候,如果这个函数要多次调用,我们希望程序只做一次实例对象,所以我将这几句放在模块里边:
程序改为:
这样第一次调用比较慢,后来速度就很快了。。
2. 之前调用DLL一直不成功,一直跳出提示框大概说 JVM 的虚拟内存不足,加大电脑虚拟内存也没有用,头痛了四天,最后原因可能是程序里面实例化对象太多,内存暴涨。
所以在加载窗口的程序中,我添加了好几句回收内存的语句,最后解决了。
GC.Collect()
3.如果MATLAB的M文件还需要用到一些图像,文本文件,将这些文件放入.NET工程下的BIN—DEDUG下边就好,这是默认的路径。
4.对MATLAB的调用生成COM比生成EXE速度更快,首选COM方法吧。
这是调用EXE的.NET程序,贴贴保留着,myexe.exe是MATLAB生成的EXE,一二三句话就是调用EXE.
Dim FileName2 As String '执行MATLAB的EXE文件
FileName2 = Application.StartupPath & "\myexe.exe"
System.Diagnostics.Process.Start(FileName2)